《iOS 编程》3. 通过 ARC 管理内存
3.1 栈
栈对应方法或函数的帧,堆则是包含大量 iOS 应用创建的对象
3.3 指针变量与对象所有权
引用计数就是社保局,调查每个人有几份工作,一个正式工作,或兼职几份工作,或失业。失业,内存就会被释放,就会给你这个 free man 推荐新工作。
那些情况会使对象失去拥有者:
- 修改指针指向另一个变量(跳槽)
- 设为 nil(辞职)
- 对象拥有者被释放(公司倒闭)
- 从 collection 对象中删除对象(裁员)
当对象没有拥有者时,指针变量的内存就该被释放。
3.4 强引用与弱引用
大部分强引用循环可以确定一个父子关系,子对象改为弱引用即可。
Xcode 的 Leaks 工具可以帮忙找出强引用循环问题。
3.5 属性
声明属性,等于隐式地声明和创建相应名称的实例变量,声明一对存取方法。当然我们还可以自定义存取方法。
属性的特性(attribute):
- 多线程:nonatomic/atomic
- 读写:readwrite/readonly
- 内存管理:strong/weak/copy/unsafe_unretained