6

我正在学习Objectiv C,我经常听到“生活在堆中”这个词,据我所知,它是指针所在的某种未知区域,但试图真正理解确切的术语......比如“我们应该制作我们的财产strong,这样它就不会生活在堆中。他说,因为财产是私有的。我知道这是一个很大的不同。很明显,我们要确保我们想要计算对这个对象,所以自动释放不会清理它(我们想从我目前所知道的“保留”它),但我想确保我理解这个术语,因为它经常被使用。

欣赏它

4

1 回答 1

14

C(以及扩展,Objective C)程序使用三个主要的内存区域来存储数据:

  • 静态区域
  • 自动区域(也称为“堆栈”),以及
  • 动态区域(也称为“堆”)。

当您通过发送对象的类 anewalloc消息来分配对象时,结果对象被分配在动态存储区域中,因此该对象被称为存在于堆中。所有 Objective-C 对象都是这样(尽管引用这些对象的指针可能位于三个内存数据区域中的任何一个中)。相反,原始局部变量和数组“存在”在堆栈中,而全局原始变量和数组存在于静态数据存储中。

只有堆对象被引用计数,尽管您可以使用malloc/ calloc/从堆中分配内存realloc,在这种情况下分配不会被引用计数:您的代码将负责决定何时free分配动态内存。

于 2013-03-09T03:43:09.803 回答