有没有办法可以调用原始方法

有没有办法可以调用原始方法

本文介绍了如果我覆盖一个类方法,有没有办法可以调用原始方法(被覆盖的方法)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

In Objective-C, if I override a class method using a category, is there a way I can call the original method (the one that was overridden)?

推荐答案

我在 +(void)load 中为您提供三种方法。在每种情况下,请将方法命名为MyCategory_method左右。

I present you with three icky ways to do this in +(void)load. In every case, name your method MyCategory_method or so.


  • class_getMethodImplementation()和class_replaceMethod()。存储旧的IMP,并直接调用它。您需要获取方法的类型编码。请注意,您也可以使用普通的C函数...

  • class_getInstanceMethod(),method_getImplementation(),method_setImplementation()。如上所述,但您不需要获取方法的类型编码。
  • 两个方法上的
  • class_getInstanceMethod(),然后是method_exchangeImplementations()。调用MyCategory_method以获取原始实现。这是最简单的方法。

  • class_getMethodImplementation() and class_replaceMethod(). Store the old IMP, and call it directly. You need to get the method's type encoding. Note that you can just use a normal C function too...
  • class_getInstanceMethod(), method_getImplementation(), method_setImplementation(). As above, but you don't need to get the method's type encoding.
  • class_getInstanceMethod() on both methods, and then method_exchangeImplementations(). Call MyCategory_method to get the original implementation. This is the easiest way to do it.

有时候,这是让它做你想做的唯一合理的方法...

Sometimes, it's the only reasonably easy way to make it do what you want...

编辑:只有当你知道自己在做什么时才这样做!

And only do this if you know what you're doing!

这篇关于如果我覆盖一个类方法,有没有办法可以调用原始方法(被覆盖的方法)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-13 02:33