【问题标题】:How do you call a method for an Objective-C object's superclass from elsewhere?如何从别处调用 Objective-C 对象的超类的方法?
【发布时间】: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?

【问题讨论】:

    标签: iphone objective-c cocoa overriding superclass


    【解决方案1】:

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

    【讨论】:

    • 不是设计。需要这个来调试。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-12-21
      • 2012-04-04
      • 1970-01-01
      • 2020-05-03
      • 1970-01-01
      • 2019-02-28
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      相关资源
      最近更新 更多