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

被折叠的 条评论
为什么被折叠?



