iphone - 如果我重写一个类方法,有没有一种方法可以调用原始方法(被重写的方法)?

标签 iphone objective-c ipad ios

在 Objective-C 中,如果我使用类别重写类方法,是否可以调用原始方法(被重写的方法)?

最佳答案

我向您展示了在 +(void)load 中执行此操作的三种令人讨厌的方法。在每种情况下,将您的方法命名为 MyCategory_method 左右。

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

有时,这是让它执行您想要的操作的唯一相当简单的方法......

编辑:只有在您知道自己在做什么的情况下才可以这样做!

关于iphone - 如果我重写一个类方法,有没有一种方法可以调用原始方法(被重写的方法)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3487828/

相关文章:

ios - 无法获得 https ://www. googleapis.com/auth/plus.login 范围权限的授权成功

iphone - UIScrollView 和内容需要触摸移动事件

ios - iOS8 中的表格 View 单元自动布局

javascript - 通过 JavaScript 为 iPad EPUB 播放音频

ios - 使用 iOS 获取某种设备标识符

ios - 如何保护 NSUserDefaults 上的整数数据免遭黑客攻击?

iphone - uisearchbar + uitableview + nsfetchedresultscontroller

iphone - TableView 进入 tabBarController

objective-c - (Cocoa) 单窗口 Cocoa 应用程序中的 UIViewController 子类等效于什么?

iphone - iPad 3.2 & [MPMoviePlayerController setFullScreen :] not showing up