iOS内存由低到高分为五个区
.text段(代码区)、.data段(已初始化的全局变量、静态变量)、.bss段(未初始化的全局变量、静态变量)、堆区、栈区
栈内存由系统管理
堆内存由开发者管理
栈内存存储变量参数
堆内存存储对象
内存管理的几种方式
手动管理MRC
谁创建,谁释放。谁retain,谁release;或者谁alloc,谁release。
需要程序员细心因为全部是需要自己手动管理的
自动管理ARC
程序员只要在 block 传值的时候不出现循环引用就行了
如果出现循环引用的时候
内存自动释放池 autorelease
当释放池销毁时,才调用引用计数
release调用后引用计数马上-1
引用计数存储位置
如果有些对象支持使用 TaggedPointer
苹果会直接将对象的指针值作为引用计数返回
如果另外一些对象不支持使用 TaggedPointer
如果当前设备是 64 位环境并且使用 Objective-C 2.0
那么会使用对象的 isa 指针 的 一部分空间 (bits.extra_rc)来存储它的引用计数
否则 Runtime 会使用一张 散列表 (SideTables())来管理引用计数