13、用“方法调配技术”调试“黑盒方法”

类的方法列表会把选择子的名称映射到相关的方法实现上,使得“动态消息派发系统”能够据此找到应该调用的方法。这些方法均以函数指针的形式来表示,这种指针叫IMP,其原型如下:

id (*IMP)(id, SEL, ...)

​ “方法调配”(method swizzling)

// 获取方法实现
Method class_getInstanceMethod(Class aClass, SEL aSelector)
// 交换两个方法的实现
void method_exchangeImplementations(Method m1, Method m2)

​ 使用可以看这篇: iOS_Runtime是什么?原理?作用?怎么实现weak?使用后面的举例。

要点:

  • 在运行期,可以向类中新增或替换选择子所对应的方法实现

  • 使用另一份实现来替换原有的方法实现,这到工序叫做“方法调配”,开发者常用此技术向原有实现中添加新功能

  • 一般来说,只有调试程序时才需要在运行期修改方法实现,这种做法不易滥用

Last updated

Was this helpful?