Runtime

OC中消息发送机制

2017-03-17  本文已影响0人  xukunluren

OC是C的超集,所以理解OC中的消息通讯机制,首先最好理解C语言中的函数调用方式。C语言使用“静态绑定”,也就是说在编译期间就能决定运行时所应调用的函数。

在OC中,如果想某个对象传递消息,使用的是动态绑定的机制来决定需要调用的方法,在底层,所有的方法都是普通的C语言去实现,然而接收到消息之后,究竟该调用哪个方法则完全取决于运行期决定,甚至可以在程序运行时改变,这些特性使的OC成为一门真正的动态语言。

Id returnValue = [someObject messageName:parameter];

编译器会将上述语句转成C语言的函数进行编译:

Id returnValue =objc_msgSend (someObject,@selector(messageName:),parameter );

objc_msgSend函数会依据接收者与选择子的类型来调用适当的方法。其原理如下:

该方法需要在接收者所属的类中搜索其“方法列表”,如果能找到与之相符的方法,就跳至其实现代码。

若是上一步没有找到相符的方法,就沿着继承体向上查找,等找到合适的方法之后再跳转。如果还是找不到对应的方法就执行“消息转发”操作。

objc_msgSend函数会将查找到的方法缓存在“快速映射表”总,每个类都有这样的一块缓存,若是之后还会有相对于的选择字需要执行,那样方法的执行速度就会很快了。

上一篇下一篇

猜你喜欢

热点阅读