NSAutoReleasePool的理解

本文探讨了Cocoa内存管理中的ReferenceCounting机制及NSAutoReleasePool的作用。NSAutoReleasePool用于管理autorelease的对象,确保它们在适当的时候被释放,避免内存泄漏。文章还讨论了在主线程和新线程中正确使用NSAutoReleasePool的方法。

  Cocoa的内存管理主要依赖于Reference Counting,而NSAutoReleasePool就是用来支持它的,autorelease pool中存放的对象会再自身干枯(drain)时被release.


  当一个object的release方法被触发时,这个对象Reference Counting减一,当Reference Counting等于0时,这个对象就被销毁了;如果触发的方法是autorelease时,对象进入autorelease pool中,pool drain时才被销毁。

   

    Cocoa期望在每一个thread都存在一个autorelease pool,如果不存在,被autorelease的object不会被销毁,从而产生内存泄露。


    NSAutoReleasePool被销毁的时候不是调用release方法,而是调用drain方法,原因是为了让程序同时兼容Reference Counting内存管理环境与Garbge Collection环境,在drain时处罚collect garbdge操作。


     在main thread中,已经存在一个autorelease pool在一下两种情况需要开发者创建自己的autorelease pool:

    (1)、在main thread中,在某个方法中出现大量的autorelease object,为了避免memory footprint的增大,可以手动创建autorelease pool用来drain objects

    (2)、创建新的thread,并在其中访问了Cocoa,需要在访问前创建autorelease pool,访问结束后drain.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值