用“方法调配技术”(method swizzling)调试“黑盒方法”--Effective笔记

Objective-C对象收到消息之后,究竟会调用何种方法需要在运行期才能解析出来。也就是说我们可以在运行期间改变调用方法,即不需要源代码,也不需要集成子类来覆写方法就能改变这个类本身调功能。新功能将在本类调所有实例中生效,而不是仅限于覆写了相关方法调那些子类实例。

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

  id (*IMP)(id,SEL,...)
用“方法调配技术”(method swizzling)调试“黑盒方法”--Effective笔记_第1张图片
屏幕快照 2017-05-08 下午4.16.10.png

1,在运行期,可以向类中新增或替换选择子所对应的方法实现
2,使用另一份实现来替换原有的方法实现,这道工序叫做“方法调配”,开发者常用此技术向原有实现中添加新功能。
3,一般来说,只有调试程序等时候才需要在运行期修改方法实现,这种做法不宜滥用,会造成难以调试查错。

你可能感兴趣的:(用“方法调配技术”(method swizzling)调试“黑盒方法”--Effective笔记)