返回

OC对象的本质之:NSObject对象的内存

IOS

正文:

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对象的内存占用细节。