“生活在堆里”是什么意思?

时间:2013-03-09 03:34:08

标签: objective-c

我正在学习Objectiv C,我不断地听到“生活在堆里”这个词,从我所理解的指针所处的某个未知区域开始,但是试图真正地控制住这个术语。 ..“我们应该让我们的财产strong所以它不会存在于堆中。他说,因为该财产是私有的。我知道这是一个很大的区别很明显,我们要确保我们想要计算对这个对象的引用,所以autorelease不会清理它(我们希望从我目前所知的“保留”它),但我想确保我理解这个术语,因为它经常被使用。 / p>

欣赏它

1 个答案:

答案 0 :(得分:14)

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

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

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

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