调用超级方法时跳过超类?

时间:2011-12-03 11:37:12

标签: ios objective-c

这可能看起来很奇怪,但我想做以下事情:

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
}

可能的?

2 个答案:

答案 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,然后你实际执行该方法。这有点像一种奇怪的递归形式。