返回

OC原理-方法缓存机制&OC消息机制剖析

IOS

前言

在前面的文章中,我们探讨了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代码。