如何从别处调用 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冲突