Effective Objective-C 2.0 阅读笔记 5

本文深入探讨iOS中的循环引用问题,讲解如何在dealloc方法中正确处理引用释放和监听取消,避免内存泄漏。通过弱引用打破保留环,利用自动释放池优化内存使用,确保代码异常安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文章

在dealloc方法中只释放引用并接触监听

  • 在dealloc方法中,一个做的事就是释放指向其他对象的引用, 并取消原来订阅的“键值观测”(KVO)或者NSNoficationCenter等通知, 不要做其他的事
  • 如果对象持有文件描述符等系统资源, 那么应该专门编写一个方法来释放此种资源。这样的类要和其使用者约定:用完资源后必须调用close方法
  • 执行异步操作不应该在dealloc里调用;只能在正常状态下执行的那些方法也不应该在dealloc里调用,因为此时对象已处在正在回收状态里了

编写“异常安全代码”是留意内存管理问题

  • 捕获异常时,一定要注意将try快内所创立的对象清理干净。
  • 在默认情况下,ARC不生成安全处理异常所需的清理代码。开启编译器标志后,可以生成这种代码,不过会导致应用程序变大,而且会降低运行效率

以弱引用避免保留环

  • 将某些引用设置为weak,可避免出现“保留环”
  • weak引用可以自动清空, 也可以不自动清空。自动清空(autonilling)是随着ARC而引入的新特性, 有运行周期系统来实现。在具备自动清空功能的弱应用上,可以随意读取其数据,因为这种引用不会指向已经回收过的对象

以“自动释放池块”降低内存峰值

  • 自动释放池排布在栈中, 对象收到autorelease消息后,系统自动将其放入最顶端的池里
  • 合理运用自动释放池, 可降低应用程序的内存峰值
  • @autoreleasepool这种新式写法能创建出更为轻便的自动释放池

感受:

  • 总感觉这本书后面的内容已经太过高深了,还是不要强行看了,感觉很难懂。
  • 对于循环引用,这个讲的很不清楚,可以参考我的参考文章
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值