当前位置:  开发笔记 > 前端 > 正文

NSAutoreleasePool在NSOperation主要?

如何解决《NSAutoreleasePool在NSOperation主要?》经验,为你挑选了3个好方法。

文档+[NSThread detachNewThreadSelector:toTarget:withObject:]说:

对于非垃圾收集的应用程序,该方法aSelector负责为新分离的线程设置自动释放池,并在该池退出之前释放该池.

我的问题是,我是否需要NSAutoreleasePool在我的-[NSOperation main]方法覆盖中创建自己的方法,还是创建NSAutoreleasePool处理方法NSOperation



1> Marc Charbon..:

好问题,即使Apple自己的文档和示例代码也不是很明确.我相信我找到了答案:

由于操作是Objective-C对象,因此应始终在任务代码实现的早期创建自动释放池.自动释放池可防止在任务执行期间自动释放的Objective-C对象泄漏.虽然在执行自定义代码时可能已经有了一个池,但是你永远不应该依赖于这种行为,而应该始终提供自己的代码.

基本上,即使David提到可能有一个游泳池,你仍然应该创建自己的游泳池.



2> 小智..:

是的你是.您正在定义一个独立的工作,NSOperationQueue将在"某个"线程上执行,因此您负责管理该工件中的内存.



3> DavidPhillip..:

您不需要在主系统中创建自己的NSAutoreleasePool,系统会为您完成.要查看此信息,请使用Xcode菜单命令Run> Show> Breakpoints打开Breakpoints窗口并输入: - [NSAutoreleasePool init]

现在运行你的程序,你会看到在NSOperation中创建了一个自动释放池.

另请参阅Apple的示例,例如http://developer.apple.com/Cocoa/managingconcurrency.html,它们不会创建自己的自动释放池.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有