Objective-C 之 栈(stack)与堆(heap)
2016-03-15 本文已影响0人
saintPN
相信iOS开发者都会常常听到"栈"与"堆"两个概念字,但是这两个概念到底是什么呢?下面来探讨一下:
栈是内存中的一块区域,都有方法或者函数被执行时,栈就会为方法或者函数分配自己的一部分内存空间,这部分内存空间称为桢(frame)。当某个应用启动并运行main函数时,main函数的桢会被保留在栈的底部,如果main调用别的方法或者函数,那么这个方法或者函数的桢就会压入栈的顶部,即main函数桢的上方。
堆也是内存中的一块区域,和栈是相对独立分开的。栈的顺序是后进先出保存桢的,而堆则是无序,如“堆”的顾名思义:一大堆,不按顺序。堆事通过指针保存对象在堆中的地址,当某个类使用alloc的时候,系统就会从堆中分配出一块内存空间。由于堆的空间是有限的,所以不能无上限创建对象,在ARC的帮助下,系统会帮助我们管理堆的空间,释放引用计数为0的对象。