iOS内存管理是采用了一个叫做引用计数的东西,当一个实例的引用计数大于0的时候,该实例在程序运行结束前所占的内存是不被释放的。
iOS中内存区域共分为五大模块:
1、堆区(heap):用来存储局部变量的值。由开发人员分配和释放(alloc和release,动态管理),如alloc一个对象 后,所分配的内存就在堆区。其优点是灵活方便,数据适应面广泛,但是效率相比栈区有所降低。
2、栈区(stack):由编译器自动分配并释放,存放函数的参数值以及局部变量的变量名。相对于堆区,栈就比较快速 高效了,但其数据不够灵活。栈的内存分配为两种:静态分配—由编译器完成,如(auto)。动态 分配—由alloca函数完成,但是一般不鼓励去动态分配。
3、静态区(全局区):全局变量和静态变量是放在一起的,但是静态区又分为未初始化区和初始化区,初始化的全局 和静态变量存放在一块区域,未初始化的全局变量和静态变量存储在相邻的另一块区域。
4、常量区:存放常量字符串,在程序结束后有OS来释放。
5、代码区:存放函数的二进制代码。
五个分区按地址从高到低排列依次为:栈区->堆区->全局区->常量区->代码区。