返回
OC对象的本质之:NSObject对象的内存
IOS
2024-02-11 09:34:01
正文:
NSObject对象的内存
在Objective-C中,NSObject是所有对象的基类,它是所有Objective-C对象的核心。当我们创建任何Objective-C对象时,它都会占用一定的内存空间。本文将深入探讨NSObject对象的内存布局,包括指针、实例变量、类变量、对齐方式等,帮助读者理解OC对象的内存占用细节。
内存布局
在arm 64架构中,NSObject对象的内存布局如下:
+------------------------------------------------+
| |
| 指针 |
+------------------------------------------------+
| |
| 实例变量 |
+------------------------------------------------+
| |
| 类变量 |
+------------------------------------------------+
其中:
- 指针 :是指向该对象的内存地址。它占用了8个字节。
- 实例变量 :是该对象特有的变量。它们存储在对象内存空间中。
- 类变量 :是所有属于该类的对象共享的变量。它们存储在类的内存空间中。
内存占用
NSObject对象的内存占用由以下几个因素决定:
- 指针 :8个字节。
- 实例变量 :由实例变量的类型和数量决定。
- 类变量 :由类变量的类型和数量决定。
对齐
在内存中,变量的地址必须是其类型的倍数。例如,如果一个变量是4个字节的整数,那么它的地址必须是4的倍数。这种对齐方式是为了提高内存访问的速度。
在NSObject对象中,指针和实例变量是8个字节对齐的。这意味着它们的地址必须是8的倍数。类变量是16个字节对齐的。这意味着它们的地址必须是16的倍数。
大小
NSObject对象的大小由以下几个因素决定:
- 指针 :8个字节。
- 实例变量 :由实例变量的类型和数量决定。
- 类变量 :由类变量的类型和数量决定。
- 对齐 :由于对齐方式的原因,NSObject对象的大小可能比实际占用空间略大。
在arm 64架构中,NSObject对象的大小通常在32字节左右。
结论
本文深入探讨了NSObject对象的内存布局、内存占用情况,包括指针、实例变量、类变量、对齐方式等,帮助读者理解OC对象的内存占用细节。