返回

OC 底层原理:类和元类 —— 内存中的分布

IOS

在 Objective-C 中,类和元类是两个至关重要的概念,它们共同构成了对象的底层实现。理解类和元类的内存分布对于深入理解 Objective-C 的内存管理机制至关重要。

类的本质结构

类是一个用来对象的蓝图,它定义了对象的属性、行为和方法。类在内存中以一个连续的结构存储,其中包括:

  • 类名: 类的名称,用于在程序中引用该类。
  • isa 指针: 指向该类元类的指针。
  • 属性: 类的属性列表,包括属性的名称、类型和访问控制修饰符。
  • 成员变量: 类的成员变量列表,包括变量的名称、类型和访问控制修饰符。
  • 实例方法: 类的实例方法列表,包括方法的名称、参数、返回值和访问控制修饰符。
  • 类方法: 类的类方法列表,包括方法的名称、参数、返回值和访问控制修饰符。

元类的本质

元类是一个类的类,它定义了类的属性、行为和方法。元类在内存中以一个连续的结构存储,其中包括:

  • 类名: 类的名称,用于在程序中引用该类。
  • isa 指针: 指向该类元类的元类的指针。
  • 属性: 类的属性列表,包括属性的名称、类型和访问控制修饰符。
  • 成员变量: 类的成员变量列表,包括变量的名称、类型和访问控制修饰符。
  • 实例方法: 类的实例方法列表,包括方法的名称、参数、返回值和访问控制修饰符。
  • 类方法: 类的类方法列表,包括方法的名称、参数、返回值和访问控制修饰符。

类和元类的内存分布

类和元类的内存分布具有以下特点:

  • 类的内存是一次性分配的,并且在编译后就分配完毕。 这意味着类在程序运行期间不会被动态修改或重新分配内存。
  • 元类的内存也是一次性分配的,并且在编译后就分配完毕。 与类类似,元类在程序运行期间也不会被动态修改或重新分配内存。
  • 每个类只有一个元类,并且每个元类只有一个类。 也就是说,类和元类是一对一的对应关系。
  • 类的 isa 指针指向其元类,而元类的 isa 指针指向其自身。 这意味着类的 isa 指针形成一个循环引用,而元类的 isa 指针形成一个自引用。

总结

类和元类在 Objective-C 中扮演着至关重要的角色,它们共同构成了对象的底层实现。理解类和元类的内存分布对于深入理解 Objective-C 的内存管理机制至关重要。

参考