第十一条 消息传递机制 objc_msgSend
2020-03-23 本文已影响0人
孙伟胜
静态绑定/动态绑定#
静态绑定,就是在编译期就能决定运行时所调用的函数。
动态绑定,就是在运行期才能确定调用函数。
消息传递机制
这样消息派发系统就在接收者所属类中查找器方法列表,如果找到和选择器名称相符的方法就跳转其实现代码,如果找不到,就再起父类找,等找到合适的方法在跳转到实现代码。这里跳转到实现代码这一操作利用了尾递归优化。
如果该消息无法被该类或者其父类解读,就会开始进行消息转发。
每次都查询会不会很慢?
每个类都有一个消息缓存列表,objc_msgSend会将匹配的结果放在这个“快速映射表里”,若稍后还查询这个类,那么查询起来就会快很多。