如何从其他地方调用Objective-C对象的超类方法?

时间:2010-05-20 19:45:38

标签: iphone objective-c cocoa override superclass

如果你正在实现一个子类,你可以在你的实现中显式调用超类的方法,即使你已经覆盖了那个方法,即:

[self overriddenMethod]; //calls the subclass's method
[super overriddenMethod]; //calls the superclass's method

如果你想从子类的实现之外的某个地方调用超类的方法,即:

[[object super] overriddenMethod]; //crashes

这甚至可能吗?而且,通过扩展,是否有可能在实现中超过一个级别,即:

[[super super] overriddenMethod]; //will this work?

2 个答案:

答案 0 :(得分:21)

更令人愉快的选择(用于调试)是添加一个类别方法,它可以为您完成:

- (void) callSuperMethod { [super overriddenMethod]; }

事实上,没有更方便的方法来做到这一点非常有用。

答案 1 :(得分:13)

你可以发送[[[object class] superclass] methodForSelector: ...]并直接通过IMP指针调用,如果你想...但如果你这样做,你的应用程序的设计可能会出现问题。