Objective-C继承; 从超类调用重写方法?

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并尝试使用它,但它仍然呼吁overrideMeBaseClass,并且由于崩溃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

  • 这是一个非常糟糕的建议:欺骗 Objective C,因为你没有找到为什么你的代码(显然)没有按应有的方式工作。 (3认同)