OC内存管理原则
OC内存管理原则
Charly张 发表于2年前
OC内存管理原则
  • 发表于 2年前
  • 阅读 33
  • 收藏 0
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

摘要: 在做[Vuforia-iOS-Lib](https://github.com/CharlyZhang/Vuforia-iOS-Lib)的Demo程序时,发现*库中的Controller在MRR工程中会得不到释放*。我看了Apple官网的["Advanced Memory Management Programming Guide"](https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html#//apple_ref/doc/uid/100...

在做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不能正常调用;
    • 因为对象图的析构顺序不确定。
标签: iOS 笔记
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 8
博文 21
码字总数 15101
×
Charly张
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: