首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSAutoreleasePool in NSOperation main?

NSAutoreleasePool in NSOperation main?
EN

Stack Overflow用户
提问于 2008-10-08 19:16:18
回答 5查看 6.2K关注 0票数 25

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

对于非垃圾收集的应用程序,方法

负责为新分离的线程设置一个自动释放池,并在该线程退出之前释放该池。

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-10-08 20:01:19

不,你需要。您正在定义一个独立的工作段,NSOperationQueue将在“一些”线程上执行这些工作,因此您负责管理该工作部件中的内存。

票数 12
EN

Stack Overflow用户

发布于 2010-02-04 22:06:17

很好的问题,即使是苹果自己的文档和示例代码在这方面也不是很清楚。我相信我已经找到了答案:

因为操作是objects对象,所以您应该在任务代码实现的早期创建一个自动释放池。自动释放池提供了防止在任务执行期间自动释放的objects对象泄漏的保护。尽管在执行自定义代码时可能已经有了一个池,但是您不应该依赖于这种行为,而应该始终提供自己的。

基本上,尽管可能存在一个池,正如David提到的那样,您仍然应该创建自己的池。

票数 14
EN

Stack Overflow用户

发布于 2008-12-01 23:13:25

您不需要在主服务器中创建自己的NSAutoreleasePool,而是由系统为您创建。要查看这一点,请使用Xcode菜单命令Run > Show>断点打开断点窗口并键入:-NSAutoreleasePool init

现在运行您的程序,您将看到在NSOperation中创建了一个自动释放池。

参见苹果的例子,例如http://developer.apple.com/Cocoa/managingconcurrency.html,它不创建自己的自动发布池。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/184409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档