文档+[NSThread detachNewThreadSelector:toTarget:withObject:]
说:
对于非垃圾收集的应用程序,该方法
aSelector
负责为新分离的线程设置自动释放池,并在该池退出之前释放该池.
我的问题是,我是否需要NSAutoreleasePool
在我的-[NSOperation main]
方法覆盖中创建自己的方法,还是创建NSAutoreleasePool
处理方法NSOperation
?
好问题,即使Apple自己的文档和示例代码也不是很明确.我相信我找到了答案:
由于操作是Objective-C对象,因此应始终在任务代码实现的早期创建自动释放池.自动释放池可防止在任务执行期间自动释放的Objective-C对象泄漏.虽然在执行自定义代码时可能已经有了一个池,但是你永远不应该依赖于这种行为,而应该始终提供自己的代码.
基本上,即使David提到可能有一个游泳池,你仍然应该创建自己的游泳池.
是的你是.您正在定义一个独立的工作,NSOperationQueue将在"某个"线程上执行,因此您负责管理该工件中的内存.
您不需要在主系统中创建自己的NSAutoreleasePool,系统会为您完成.要查看此信息,请使用Xcode菜单命令Run> Show> Breakpoints打开Breakpoints窗口并输入: - [NSAutoreleasePool init]
现在运行你的程序,你会看到在NSOperation中创建了一个自动释放池.
另请参阅Apple的示例,例如http://developer.apple.com/Cocoa/managingconcurrency.html,它们不会创建自己的自动释放池.