我有一个Objective-C类,其中有一个方法是打算被重写的,它会在另一个方法中使用。代码大致如下:
@interface BaseClass
- (id)overrideMe;
- (void)doAwesomeThings;
@end
@implementation BaseClass
- (id)overrideMe {
[self doesNotRecognizeSelector:_cmd];
return nil;
}
- (void)doAwesomeThings {
id stuff = [self overrideMe];
/* do stuff */
}
@end
@interface SubClass : BaseClass
@end
@implementation SubClass
- (id)overrideMe {
/* Actually do things */
return <something>;
}
@end
然而,当我创建一个
SubClass
并尝试使用它时,它仍然在BaseClass
上调用overrideMe
并由于doesNotRecognizeSelector:
而崩溃。(我没有做[super overrideMe]
或其他愚蠢的事情)。有没有办法让
BaseClass
调用被覆盖的overrideMe
?
[subclassInstance overrideMe]
,但由于doesNotRecognizeSelector:
而崩溃?听起来有点奇怪,但如果我是您,第一件事就是检查一下在覆盖方法时是否拼写了方法的名称(如果在实现中拼写方法名称错误,编译器不会抱怨,在调用正确的方法名称时,它不会被覆盖)。 - Itai Ferber