理解 ojbc_msgSend 的作用

2016-09-18  本文已影响0人  bamboomoon

objc_msgSend

在 OC中,如果向某对象传递消息,那就会使用动态绑定机制来决定需调用的方法
在底层,所以的方法都是 c函数。对象接受到消息之后,调用哪一个方法,在运行期决定,甚至可以在程序运行时决定

给对象发送消息的代码

//在 oc 中发送消息就可以写成这样
id returnValue = [someObject messageName:parameter];

//编译器看到上面的代码,就会转换为 c 语言函数
void objc_msgSend(id self,SEL cmd,...) 
//可变参数,意思就是想 self这个对象发送消息


//接受者-》someObject 选择子(方法)-》messageName: 要这个接受者调用这个选择子
id returnValue = objc_msgSend(someObject,@seletor(messageName:),parameter)

原理

objc_msgSend函数会依据接收者与选择子的类型来调用适当的方法

  1. 这个函数会在接收者的类中搜寻其 方法列表.如果找到了就跳转到其实现代码。
  2. 如果没有找到,就沿着继承体系继续向上查找,等找到合照的方法再跳转
  3. 最后还是没有找到的话,就执行 消息转发

特殊情况

上一篇 下一篇

猜你喜欢

热点阅读