《iOS 编程》3. 通过 ARC 管理内存

3.1 栈

栈对应方法或函数的帧,堆则是包含大量 iOS 应用创建的对象

3.3 指针变量与对象所有权

引用计数就是社保局,调查每个人有几份工作,一个正式工作,或兼职几份工作,或失业。失业,内存就会被释放,就会给你这个 free man 推荐新工作。

那些情况会使对象失去拥有者:

  • 修改指针指向另一个变量(跳槽)
  • 设为 nil(辞职)
  • 对象拥有者被释放(公司倒闭)
  • 从 collection 对象中删除对象(裁员)

当对象没有拥有者时,指针变量的内存就该被释放。

3.4 强引用与弱引用

解决强引用循环问题后的RandomItems
大部分强引用循环可以确定一个父子关系,子对象改为弱引用即可。

Xcode 的 Leaks 工具可以帮忙找出强引用循环问题。

3.5 属性

声明属性,等于隐式地声明和创建相应名称的实例变量,声明一对存取方法。当然我们还可以自定义存取方法。

属性的特性(attribute):

  • 多线程:nonatomic/atomic
  • 读写:readwrite/readonly
  • 内存管理:strong/weak/copy/unsafe_unretained

项目代码保存在我的 GitHub: iOSProgramming4edSolutions