消息转发即止基本上分为三个步骤
1. 动态方法解析
2. 备用接受者
3. 完整转发
1. 动态方法解析
解析类方法
给这个类增加一个方法, 指定方法和IMP
解析实例方法
给self增加一个方法, 指定方法和imp
2. 备用接受者
当前动态方法解析无法处理消息,
则会走备用接受者,
这个备用接受者只能是一个新的对象,
否则会出现自我无线循环
如果没有指定的对象来处理selector,
那就调用父类的实现来返回结果.
3. 完整转发
如果动态方法解析和备用接受者都没有处理这个消息,
那么会走完整的消息转发.
iOS runtime探究(二): 从runtime开始深入理解OC消息转发机制
https://www.jianshu.com/p/eac6ed137e06
OC的实例方法在转写为C语言后实际就是一个函数,但是OC并不是在编译期决定调用哪个函数,而是在运行期决定,因为编译期根本不能确定最终会调用哪个函数
Person *p = [Person alloc];
Person *p = objc_msgSend(objc_getClass("Person"), sel_registerName("alloc"));
网友评论