【问题标题】:Using an object beyond Autorelease context使用自动释放上下文之外的对象
【发布时间】:2010-07-01 10:25:15
【问题描述】:

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

谁能给我一个可以使用这个概念的情况?

【问题讨论】:

    标签: iphone nsautoreleasepool


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多