OC消息发送分两步:
1.编译阶段
方法调用转换成objc_msgSend函数调用
不带参数:objc_msgSend(receiver,selector)
带参数:objc_msgSend(recevier,selector,org1,org2,…)
2.运行时阶段,
先从类到父类继承链中查找方法,没找到就消息转发
整个调用流程图如下
2.1.继承链中查找方法
实例对象调用一个方法,会首先在本类方法列表查找,如果没有,会在父类再查找,直到根类NSObject,在任何一层找到方法,则执行,如果到了最后根类NSObject还没有找到,才会触发Objective-C Runtime的消息转发机制。
类对象调用一个方法,会首先在本类的元类方法列表中查找,如果没有,会在元类的父类再查找,直到根类NSObject的元类,在任何一层找到方法,则执行,如果到了最后根类NSObject元类还没有找到,才会触发Objective-C Runtime的消息转发机制。
2.2.OC Runtime的消息转发机制
2