【发布时间】:2010-12-25 21:29:28
【问题描述】:
我有一个 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:而崩溃?听起来有点奇怪,但如果我是你,我首先要检查的是在覆盖时我是否正确拼写了方法的名称(如果你在实现中拼错了方法的名称,编译器不会抱怨,当您调用正确的方法名称时,它不会被覆盖)...
标签: objective-c oop inheritance