这可能看起来很奇怪,但我想做以下事情:
A类
- (void)someMethod;
B组:A
- (void)someMethod; // overrides
C类:B
- (void)someMethod; // overrides
在C类中,我想覆盖两个超类中存在的方法,但是在[super methodName]调用上只调用A类的方法。
- (void)someMethod
{
[super someMethod]; // but I want to call class A, not B
}
可能的?
答案 0 :(得分:9)
这样的事情应该有效:
// in Class C:
#import <objc/runtime.h>
- (void)someMethod
{
// I want to call class A's implementation of this method
IMP method = class_getMethodImplementation([ClassA class], _cmd);
method(self, _cmd);
}
答案 1 :(得分:0)
好吧,你可以做一个hacky解决方案,你把一个整数参数传递给每个超级调用递减的方法,这样每个方法实现只调用它的超类方法,直到最后你达到0,然后你实际执行该方法。这有点像一种奇怪的递归形式。