如果我重写一个类的方法,有没有办法,我可以调用原来的方法(被覆盖的方法)?
在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获取原始实现。 这是最简单的方法。
有时候,这是使它做你想做的唯一合理简单的方法。
编辑:只有这样做,如果你知道你在做什么!
看起来不可能。
当类别重写inheritance的方法时,类别中的方法可以像往常一样通过消息调用inheritance的实现。 但是,如果某个类别覆盖了该类别中已有的方法,则无法调用原始实现。
这是对我说的是,如果你通过一个类别覆盖子类的方法,你可以像往常一样调用[super methodName],但是如果直接覆盖基类方法,则不能调用原始方法。
如果您dynamic提供类别覆盖(请参阅resolveInstanceMethod :),则可以事先caching以前的方法select器,然后调用该方法。