编写高质量iOS代码(五)

1.内存管理-理解引用计数
2.使用ARC简化引用计数
a.ARC管理对象生命周期的办法基板上就是:在合适的地方插入“保留”以及“释放”操作。在ARC环境下,变量的内存管理语义可以通过修饰符指明,而原来的则需要手动执行 保留 或者 释放。
b.由方法返回的对象,其内存管理语义总是通过方法名来体现,ARC将此确定为开发者必须遵守的规则
c.ARC只负责管理oc对象的内存。尤其要注意:CoreFoundation对象不归ARC管理,开发者需要适时调用CFRetain CFRelease
3.在dealloc方法中只释放引用并解除监听
a. 在dealloc方法里,应该做得事情就是释放指向其他对象的引用,并取消原来订阅的KVO 或者 NSNotificationCenterden等通知,不要做其他事情
b.如果对象持有文件描述符等系统资源,要专门编写一个方法来释放资源,并约定使用者,使用完成后必须调用释放方法
c.执行异步任务的方法不应该在dealloc里调用;只能在正常状态下执行的那些方法也不应该在dealloc里调用,因为此时对象已经处于正在回收的状态了
4.编写 异常安全代码 时留意内存管理问题
a.捕获异常时,一定注意将try块内所创立的对象清理干净
b.默认情况下,ARC不生成安全处理异常所需要的清理代码。开启编译器标识后,可生成这种代码,但是会导致应用程序变大,降低运行效率
5.以弱引用避免保留环
a.将某些引用设为 weak ,可避免出现 保留环
b.weak引用可以自动清空,也可以不自动清空。自动清空是随ARC而引人的新特性,由运行期系统来实现。在具备自动清空功能的弱引用上,可以随意读取数据,因为这种引用不会指向已经回收的对象
6.以 自动释放池块 来降低内存峰值
a.自动释放池排布在栈中,对象收到autorelease消息后,系统将其放入最顶端的池里
b.合理运用自动释放池,可降低内存峰值
c.@autoreleasepool 这种新式写法能创建出更为轻便的自动释放池
7.用僵尸对象 调试内存管理问题
a.系统在回收对象时,可以不将其真的回收,而是把它转化为僵尸对象。通过环境变量NSZombieEnabled可开启此功能
b.系统会修改对象的isa指针,令其指向特殊的僵尸类,从而使该对象变为僵尸对象。僵尸对象能够响应所有的选择子,响应方式为:打印一条包含消息内容及其接受者的消息,然后终止程序。
8 不要使用retaincount
a.给定时间点上的 绝对保留计数 无法反应对象生命周期的全貌

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值