返回

iOS探索底层-类的结构探索(上)

IOS

前言

在上篇文章《iOS底层探索——对象的本质&isa分析》中,我们揭开了对象中包含的isa指针的神秘面纱,并通过isa指针,从对象中找到了它所属的类。今天,我们将继续深入探索类的秘密,揭示其内部结构。

类结构剖析

1. 元类

每个类都有一个对应的元类,它负责管理该类的元数据信息,例如类名、类方法和属性列表。元类的类名以一个前缀“__NSCFType”开头,并且它的isa指针指向根元类NSObject的元类。

2. 实例变量列表

类中定义的实例变量被存储在一个结构体中,称为实例变量列表。它包含每个实例变量的偏移量、类型信息和名称。

3. 方法列表

类中的方法被存储在两个数组中:实例方法列表和类方法列表。实例方法列表包含指向实例方法实现的指针,而类方法列表包含指向类方法实现的指针。

4. 协议列表

类中采用的协议被存储在一个协议列表中。协议列表包含指向被采用协议的指针。

5. 超类

类的超类被存储在一个称为“superclass”的指针中。它指向父类的类对象。

类结构图示

+---------------------------------------------+
|                                             |
|                    类对象                     |
|                                             |
+---------------------------------------------+
|                                             |
|                 元类                         |
|                                             |
+---------------------------------------------+
|                                             |
|               实例变量列表                   |
|                                             |
+---------------------------------------------+
|                                             |
|               实例方法列表                   |
|                                             |
+---------------------------------------------+
|                                             |
|               类方法列表                   |
|                                             |
+---------------------------------------------+
|                                             |
|                 协议列表                    |
|                                             |
+---------------------------------------------+
|                                             |
|                   超类                       |
|                                             |
+---------------------------------------------+

总结

通过探索类的结构,我们揭示了它内部管理信息的机制。这些元数据元素构成了类的骨架,使它能够存储和处理与其自身及其实例相关的信息。随着我们对iOS底层的不断探索,我们将继续深入了解这些结构的内部运作方式,揭开iOS系统的更多秘密。