在iOS / CocoaTouch上我经常看到在方法中创建NSAutoreleasePool的新实例的代码。我最近在NSOperation中看到了一个。
设置NSAutoreleasePool的新实例的基本规则是什么?为什么这只是依赖于在main.m中创建的预先存在的发布池?
谢谢,
道格
答案 0 :(得分:6)
您可以随时使用新的自动释放池,但这并不总是有益的。无论何时启动新线程或在该线程中自动释放的对象都将被泄露。在创建和自动释放大量对象的方法中创建新的自动释放池也很常见。例如,如果你有一个在50次迭代中每次创建10个对象的循环,你应该考虑为该方法创建一个自动释放池,如果不是作为循环的一部分,那么为每次迭代创建一个新的。
答案 1 :(得分:3)
当没有一个池时(例如在新线程中)或者在运行循环中的那个池不够时创建自己的池(在循环中创建自动释放的对象将运行多次迭代),或者当你想要加强控制你创建的自动释放对象何时最终被释放。
答案 2 :(得分:1)
我在iOS 4.3中测试过,你需要在执行performSelectorInBackground时创建自己的自动释放池。使用NSOperation或dispatch_async时无需创建。
似乎在iOS> = 5.0中,即使使用performSelectorInBackground,系统也会自动创建自动释放池,因此当您需要创建自己的自动释放池时,我无法找到案例。
但无法找到记录的更改。