Вы должны реализовать g
в родительском классе, но заставить его ничего не делать.Таким образом, он может быть вызван без ошибок, но все же может быть переопределен.
@interface A : NSObject
@end
@implementation A
- (void) f {
[self g];
}
- (void) g {} // Does nothing in baseclass
@end
@interface B : A
@end
@implementation B
- (void) g {
NSLog(@"called g...");
}
@end
Или вы проверяете метод объекта перед его выполнением.
if ([self respondsToSelector:@selector(g)]) {
[self performSelector:@selector(g) withObject:nil];
}
Но это может получитьдовольно некрасиво.