+[NSThread detachNewThreadSelector:toTarget:withObject:]的文档说:
对于非垃圾收集的应用程序,方法
负责为新分离的线程设置一个自动释放池,并在该线程退出之前释放该池。
我的问题是,我是否需要在-[NSOperation main]方法的重写中创建自己的-[NSOperation main],还是由NSOperation处理NSAutoreleasePool的创建?
发布于 2008-10-08 20:01:19
不,你需要。您正在定义一个独立的工作段,NSOperationQueue将在“一些”线程上执行这些工作,因此您负责管理该工作部件中的内存。
发布于 2010-02-04 22:06:17
很好的问题,即使是苹果自己的文档和示例代码在这方面也不是很清楚。我相信我已经找到了答案:
因为操作是objects对象,所以您应该在任务代码实现的早期创建一个自动释放池。自动释放池提供了防止在任务执行期间自动释放的objects对象泄漏的保护。尽管在执行自定义代码时可能已经有了一个池,但是您不应该依赖于这种行为,而应该始终提供自己的。
基本上,尽管可能存在一个池,正如David提到的那样,您仍然应该创建自己的池。
发布于 2008-12-01 23:13:25
您不需要在主服务器中创建自己的NSAutoreleasePool,而是由系统为您创建。要查看这一点,请使用Xcode菜单命令Run > Show>断点打开断点窗口并键入:-NSAutoreleasePool init
现在运行您的程序,您将看到在NSOperation中创建了一个自动释放池。
参见苹果的例子,例如http://developer.apple.com/Cocoa/managingconcurrency.html,它不创建自己的自动发布池。
https://stackoverflow.com/questions/184409
复制相似问题