Ans*_*ala 6 oop inheritance objective-c
我有一个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
Run Code Online (Sandbox Code Playgroud)
然而,当我创建SubClass
并尝试使用它,但它仍然呼吁overrideMe
的BaseClass
,并且由于崩溃doesNotRecognizeSelector:
.(我不是那样做[super overrideMe]
或者像这样的任何蠢事).
有没有办法BaseClass
打电话被覆盖overrideMe
?
Fel*_*lix -1
编写一个类别来BaseClass
重写该方法。
@interface BaseClass (MyCategory)
- (id) overrideMe;
@end
@implementation BaseClass (MyCategory)
- (id) overrideMe
{
/* Actually do things */
return <something>;
}
@end
Run Code Online (Sandbox Code Playgroud)
现在, 的所有实例都将使用新的实现BaseClass
来响应选择器。overrideMe