16

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

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

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

[[object super] overriddenMethod]; //crashes

这甚至可能吗?通过扩展,是否有可能在实现中上升不止一个级别,即:

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

2 回答 2

24

一个更令人愉快的选择(用于调试)是添加一个为您执行此操作的类别方法:

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

事实上,没有更方便的方法可以做到这一点,这在很大程度上是设计使然。

于 2010-05-20T20:19:33.137 回答
14

如果您愿意,您可以直接通过 IMP 指针发送[[[object class] superclass] methodForSelector: ...]和调用……但是如果您这样做,您的应用程序的设计可能有一些非常错误的地方。

于 2010-05-20T19:48:44.197 回答