消息发送流程图
设定消息接受者为receiver
图是用markdown画的,适配可能有点问题,浏览器页面放大看好一些
这个过程很多博文都介绍过,在此不再累赘.我们只提炼出里边需要我们注意的内容即可.
总结一下
- 1,方法的调用都是通过
objc_msgSend(receiver,SEL...)
做到的,OC的方法中有两个默认值,self
, _cmd
- 2,方法在类中查找的过程中会优先去
cache
中,然后再去method_list
查找,如果都没有,沿着继承链,递归查找 - 3,如果在继承链上没有找到,那么就进入消息转发过程
- 4,如果找到了,方法会被记录到cache中,方便下次查找
- 5,其实在查找方法的过程中,Runtime还做了各种异常处理,比如class不存在,class没有初始化等等