iOS 消息传递

在Objective-C 中,对象调用方法,这是很常见的事情。也许是灯下黑,就因为它很常见,所以我以前都没有深入地去了解过,它的实现机制是怎样的。这次,趁着空闲,多方查阅资料,总算了解了大概。

当对象收到消息时,消息函数首先根据该对象的isa指针找到该对象所对应的类的方法表,并从表中寻找该消息对应的方法selector。如果找不到,objc_msgSend将继续从父类中寻找,直到NSObject类。一旦找到了方法选标, objc_msgSend则以消息接收者对象为参数调用,调用该选标对应的方法实现。调用方式:objc_msgSend(receiver, selector, arg1, arg2, ...)
这就是在运行时系统中选择方法实现的方式。在面向对象编程中,一般称作方法和消息动态绑定的过程。

什么是objc_msgSend、isa ?我们得先了解一下运行时、类和对象的相关知识。我们都知道,对象是类的一个实例,但其实,类也是一个对象。既然对象能调用实例方法,而类又能调用类方法,那么把类也当成是一种特殊的对象,是件顺理成章的事情。对象是类的一个实例,那么,如果类也是对象的话,类又是谁的实例呢?问的好!类,是元类的一个实例。


iOS 消息传递_第1张图片
1055199-5522e6bfc8a01a19.png

网上有很多优秀的文章,就不再重复造轮子了。

可参考:类的本质-类对象

你可能感兴趣的:(iOS 消息传递)