返回
跳脱浮华,揭秘iOS底层原理——类原理分析(上)
IOS
2024-01-25 22:41:26
在上一篇文章中,我们对Person的对象进行了一番分析,接下来我们继续打印Person的内存情况。
2023-03-08 17:13:06.955489+0800 Task3_DEBUG[18338:478185] Person Object Detail:
isa: 0x104900230
_name: Person is a boy
_age: 19
---------------------
这次我们找到了另一个隐藏的秘密:一个对象的isa指向的并不是普通的类,而是一个元类 。
元类也和普通类一样,也是一个类,继承自NSObject类,只是这个类的作用不同。元类有两个作用:
- 管理普通类 :元类管理着它的普通类,负责类的注册、创建、销毁等操作,元类存储了类属性和类方法。
- 记录普通类对象信息 :元类记录着所有普通类对象的信息,包括对象的isa指针、对象的实例变量、对象的类等。
类的isa指针指向元类,而元类的isa指针指向NSObject类的元类。
-------------------------------------
| Class(A) | isa -> |
|-----------|----------------------|
| isa | 0x104900238 (ClassA) |
|... | |
|------------------------------------|
| Class(B) | isa -> |
|-----------|----------------------|
| isa | 0x104900238 (ClassA) |
|... | |
-------------------------------------
元类是一个特殊的存在,它不存在于普通类中,也不会被编译器生成,而是由系统自动创建和维护。
类的isa指针指向元类,这种设计的好处是:
- 解耦了类和元类 :类和元类之间不再是强耦合的关系,元类可以独立于类存在,这使得类的扩展和维护更加容易。
- 统一了对象内存布局 :无论是一个普通类对象还是一个元类对象,它们在内存中的布局都是一样的,都包含一个isa指针和一个实例变量区。
- 方便了对象的创建和销毁 :当创建一个对象时,系统会自动创建一个元类,当销毁一个对象时,系统会自动销毁该对象的元类。
元类是一个重要的概念,它在iOS底层原理中扮演着重要的角色。在后续的文章中,我们将继续深入探讨元类,并介绍元类在iOS底层原理中的应用。
结语
在本篇文章中,我们对类的isa指针进行了深入分析,了解了类的isa指针指向元类,以及元类的作用和设计优势。希望本篇文章能够帮助读者更加深入地理解iOS底层原理。