文章目錄
  1. 1. 思考角度
  2. 2. 基本原则
  3. 3. 其他原则

在做Vuforia-iOS-Lib的Demo程序时,发现库中的Controller在MRR工程中会得不到释放。我看了Apple官网的“Advanced Memory Management Programming Guide”,收获不小,做点笔记。

思考角度

内存管理应该从对象所有权的角度思考,而不应该从引用计数的角度,去过分强调实现细节。

图片来自官方文档

基本原则

  1. 你拥有任何你创建的对象。
    • 使用 “alloc”, “new”, “copy”或者“mutableCopy” 创建的对象。
  2. 可以利用retain获取对象的所有权。
    • 存取方法init中获取对象所有权作为自身属性;
    • 为避免其他操作将对象销毁而造成问题;
  3. 当不需要对象时,必须释放对其所有权。
    • 利用“release” 或 “autorelease”
  4. 必须释放不该拥有的对象的所有权。

其他原则

  1. 你不拥有以引用形式返回的对象。
    • 比如 ClassName **id *
  2. 存取方法来管理内存。

    • 用来赋值给属性;
    • 不在initdealloc中使用存取方法
  3. 用弱引用来避免循环引用

  4. 不用dealloc管理稀缺资源。
    • 不应该在dealloc中管理文件描述符网络连接缓存等。
    • 因为程序的bug或突然中断会导致dealloc不能正常调用;
    • 因为对象图的析构顺序不确定。
文章目錄
  1. 1. 思考角度
  2. 2. 基本原则
  3. 3. 其他原则