内存布局结构

iOS内存管理方案(objc-runtime-680)
- TaggedPointer
- NONPOINTER_ISA


- 散列表



ARC
- ARC是LLVM和Runtime协作的结果
- ARC中禁止手动调用retain/release/retainCount/delloc
- ARC中新增weak,strong关键字
引用计数管理



delloc实现:

obj_destructInstance()实现:
clearDeallocating()实现:
自动释放池(AutoReleasePool)
- 以栈为结点通过双线链表的形式组合而成
- 与线程一一对应
- 在当次runloop将要结束的时候调用 AutoReleasePoolPage::Pop
- 多层嵌套就是多次插入哨兵对象




AutoReleasePoolPage::Pop
- 根据传入的哨兵对象找到对应位置
- 给上次Push操作之后添加的对象依次发送release消息
- 回到next指针到正确位置
循环引用
- 自循环引用
- 相互循环引用
- 多循环引用
如何破除循环引用
- 避免产生循环引用
- 在合适时机手动打破循环引用
具体解决方案
- __weak
- __block
- __unsafe_unretained(会产生悬垂指针)
Note:
- MRC下,__block修饰对象不会增加引用计数,避免了循环引用
- ARC下,__block修饰对象被强引用,无法避免循环引用,需要手动解环
NSTimer循环引用问题