OC内存管理原则

在做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不能正常调用;
    • 因为对象图的析构顺序不确定。

转载于:https://my.oschina.net/chicboi/blog/717706

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值