Objective-C中,调用方法采用的是一种消息传递机制。

参考文章:http://blog.csdn.net/xingyevc/article/details/39397873

 

如果向某个对象传递一个信息,则会使用OC的动态绑定机制来决定需要调用的方法。

在底层,所有方法都是普通C语言函数。

然而对象收到消息后,究竟该掉哪个方法则完全于运行期决定,甚至可以在程序运行时改变。

这些特性使得OC称为一门真正的动态语言。

 

给对象发消息:

id returnValue = [someObject messageName:parameter];

转化为:

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

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

为了完成此操作,该方法需要在接收者所属的类中搜索其“方法列表”(list of methods)

如果能找到与选择子名称相符的方法,就跳至其实现代码。

若找不到,那就沿着继承体系继续向上查找,等找到名称相符的方法之后再跳转。

如果最终还是找不到相符的方法,那就执行“消息转发”