如果我重写一个类的方法,有没有办法,我可以调用原来的方法(被覆盖的方法)?

在Objective-C中,如果我使用一个类别覆盖一个类方法,是否有一种方法可以调用原始方法(被覆盖的方法)?

我用三个不同的方法来做+(void)load 。 在任何情况下,请将您的方法命名为MyCategory_method。

  • class_getMethodImplementation()和class_replaceMethod()。 存储旧的IMP,并直接调用它。 你需要获得方法的types编码。 请注意,你也可以使用一个普通的C函数…
  • class_getInstanceMethod(),method_getImplementation(),method_setImplementation()。 如上所述,但是您不需要获取方法的types编码。
  • 两个方法都使用class_getInstanceMethod(),然后使用method_exchangeImplementations()。 调用MyCategory_method获取原始实现。 这是最简单的方法。

有时候,这是使它做你想做的唯一合理简单的方法。

编辑:只有这样做,如果你知道你在做什么!

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCategories.html

看起来不可能。

当类别重写inheritance的方法时,类别中的方法可以像往常一样通过消息调用inheritance的实现。 但是,如果某个类别覆盖了该类别中已有的方法,则无法调用原始实现。

这是对我说的是,如果你通过一个类别覆盖子类的方法,你可以像往常一样调用[super methodName],但是如果直接覆盖基类方法,则不能调用原始方法。

如果您dynamic提供类别覆盖(请参阅resolveInstanceMethod :),则可以事先caching以前的方法select器,然后调用该方法。