0

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

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

4

1 回答 1

1

简短的回答:文档的意思是,如果您需要将已自动释放的对象保留在自动释放池中,则需要保留它。

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

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

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

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

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

于 2010-07-01T21:31:53.223 回答