返回
OC原理-方法缓存机制&OC消息机制剖析
IOS
2023-12-01 23:35:00
前言
在前面的文章中,我们探讨了OC原理中对象和类的本质,了解到类和分类的所有方法存储在class_rw_ext_t->methods
的数组中。那么,当我们调用方法时,OC是如何查找这些方法的呢?本文将深入剖析OC中的方法查找过程和消息机制,揭秘OC底层运行的奥秘。
方法查找
在OC中,方法查找是一个比较曲折的过程。当我们调用一个方法时,系统会先根据对象的isa
指针找到对应的Class
对象或者Meta-Class
对象。如果在Class
对象或者Meta-Class
对象中找不到该方法,系统还会继续在父类中查找,直到找到该方法为止。
整个方法查找过程可以用以下流程图来
+--------------+
| isa指针指向 |
+--------------+
|
V
+------------------------------------------------------------+
| 根据isa指针找到Class对象或者Meta-Class对象,查找方法 |
+------------------------------------------------------------+
|
| 方法存在
V
+--------------------------+
| 返回对应的方法实现 |
+--------------------------+
|
| 方法不存在
V
+----------------------------------------------------+
| 继续在父类中查找方法,直到找到该方法为止 |
+----------------------------------------------------+
|
V
+--------------------------+
| 返回对应的方法实现 |
+--------------------------+
|
V
+--------------+
| 找不到方法 |
+--------------+
消息机制
消息机制是OC中另一个重要的概念。消息机制可以看作是对象与外界通信的一种方式。当我们向一个对象发送一条消息时,系统会根据消息中的选择器(selector)来找到对应的方法,并执行该方法。
消息机制的本质是动态绑定。在编译时,系统并不知道对象会收到哪些消息,因此无法静态地绑定方法到对象。只有在运行时,当对象收到一条消息时,系统才会根据消息中的选择器动态地绑定方法到对象。
消息机制还涉及到以下几个重要的概念:
- 接收者(receiver): 消息的接收者,即发送消息的对象。
- 选择器(selector): 消息的选择器,用于唯一标识一条消息。
- 方法实现(implementation): 消息对应的具体方法实现。
总结
方法查找和消息机制是OC底层运行机制的重要组成部分。通过对这两个机制的深入理解,我们可以更好地理解OC的运行原理,从而编写出更加高效和健壮的OC代码。