内存管理

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())来管理引用计数