使用Autorelease上下文之外的对象

时间:2010-07-01 10:25:16

标签: iphone nsautoreleasepool

在Apple开发人员关于自动释放池的网站文章中的“保证基金会所有权政策”下 http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html#//apple_ref/doc/uid/20000047-997594,他们谈论将对象的生命周期扩展到自动释放池之外。

有人可以给我一个可以使用这个概念的情况吗?

1 个答案:

答案 0 :(得分:1)

简短回答:文档说的是,如果你需要保留一个在自动释放池中自动释放的对象,你需要保留它。

答案很长:例如,说我需要对1000个对象进行某些操作。一旦我完成这些对象,我将自动释放它们。如果没有自动释放池,它们最终会被释放,但是将这1000个对象保存在内存中会使程序变得非常慢(至少在它们被自动释放之前)。

为了解决这个问题,我正在创建一个每100个对象清理一次的自动释放池。但是,如果我需要保留最后一批的最后一个对象会发生什么?我仍然需要清除其他99个物体。我要做的是向最后一个对象发送一条保留消息,然后清理自动释放池。

这样,自动释放池会通知系统它不再需要这100个项目,但是您已经让系统知道您确实需要其中一个项目。如果对象的先前保留计数为1,那么它仍然会在:

1(原始保留计数)+1(保留)-1(自动释放池释放)= 1。

这会在自动释放池完成后保留对象。