NSAutoreleasePool。 什么时候适合创build一个新的自动释放池?

在iOS / CocoaTouch上,我经常看到代码在一个方法中创build一个新的NSAutoreleasePool实例。 我最近看到一个在NSOperation内。

设置NSAutoreleasePool的新实例的基本规则是什么? 为什么这样做比单纯依靠在main.m中创build的预先存在的发布池更好?

谢谢,
道格

您可以随时使用新的自动释放池,但并不总是有益的。 每当你启动一个新的线程时,它是必需的,或者在那个线程中自动释放的对象将被泄漏。 在创build和自动释放大量对象的方法中创build新的自动释放池也很常见。 例如,如果您有一个循环在50次迭代中创build了10个对象,则应考虑为该方法创build一个自动释放池(如果不是作为循环的一部分),以便为每次迭代创build一个新对象。

当没有一个合适的位置时(例如在一个新的线程中),或者当运行循环中的运行循环不足时,创build自己的池(在循环中创build自动释放的对象,这个对象将运行多次迭代),或者当你想增加控制何时你创build的自动释放对象最终被释放。

我在iOS 4.3中进行了testing,并且在执行performSelectorInBackground时需要创build自己的自动释放池。 使用NSOperation或dispatch_async时不需要创build。

在iOS> = 5.0中似乎,即使使用performSelectorInBackground,系统也会自动创build自动释放池,所以当您需要创build自己的自动释放池时,无法find案例。

尽pipe如此,却无法findlogging的变化。