如何从别处调用 Objective-C 对象的超类的方法?

Posted

技术标签:

【中文标题】如何从别处调用 Objective-C 对象的超类的方法?【英文标题】:How do you call a method for an Objective-C object's superclass from elsewhere? 【发布时间】:2011-02-22 01:33:08 【问题描述】:

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

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

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

[[object super] overriddenMethod]; //crashes

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

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

【问题讨论】:

【参考方案1】:

如果需要,您可以发送[[[object class] superclass] methodForSelector: ...] 并通过 IMP 指针直接调用...但是如果您这样做,则可能是您的应用程序设计有问题。

【讨论】:

不是设计。需要这个来调试。【参考方案2】:

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

- (void) callSuperMethod  [super overriddenMethod]; 

事实上,没有更方便的方法可以做到这一点。

【讨论】:

以上是关于如何从别处调用 Objective-C 对象的超类的方法?的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 带有Objective-C选择器'*'的方法'*()'与具有相同Objective-C选择器的超类'UIView'中的'*'的getter冲突

在 Python 的超类中调用超类方法

给定一个指向对象的超类指针,如何获取对象的大小?

如何从超类中检测对象

Objective-C中如何创建构造函数呢?

在 Swift 中覆盖具有不同类型的超类属性