aryaxt aryaxt - 4 months ago 16
Objective-C Question

Force child classes to override method

How can I make it so that any class that inherits from my base class is forced to override a specific method? I don't want to use a protocol, because that wouldn't make this behavior automated.

@interface MyBaseClass : NSObject
{
}

- (void)performAnAction;

@end

@implementation MyBaseClass

- (void)performAnAction
{
@throw([NSException exceptionWith...]);
}

@end

Answer

How exactly do you mean, force them to override it? If you simply implement the parent method like so:

- (void)performAction {
    NSAssert(NO, @"The method %@ in %@ must be overridden.",
         NSStringFromSelector(_cmd), NSStringFromClass([self class]));
}

then it'll throw an exception at runtime if the child class fails to override it. Unfortunately there is no way to enforce this at compile-time.

Comments