我正在学习Objectiv C,我不断地听到“生活在堆里”这个词,从我所理解的指针所处的某个未知区域开始,但是试图真正地控制住这个术语。 ..“我们应该让我们的财产strong
所以它不会存在于堆中。他说,因为该财产是私有的。我知道这是一个很大的区别很明显,我们要确保我们想要计算对这个对象的引用,所以autorelease不会清理它(我们希望从我目前所知的“保留”它),但我想确保我理解这个术语,因为它经常被使用。 / p>
欣赏它
答案 0 :(得分:14)
C(以及扩展名为Objective C)程序使用三个主要的存储区来存储数据:
当您通过向类发送new
或alloc
消息来分配对象时,生成的对象将分配在动态存储区域中,因此该对象被认为存在于堆中。所有Objective-C对象都是这样的(尽管引用这些对象的指针可能位于三个内存数据区域中的任何一个)。相比之下,原始局部变量和数组在堆栈上“存活”,而全局原始变量和数组存在于静态数据存储中。
只有堆对象被引用计数,尽管您可以使用malloc
/ calloc
/ realloc
从堆中分配内存,在这种情况下,分配不会被引用计数:您的代码将负责决定何时free
分配的动态内存。