首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >您是否需要在GCD中的块中创建NSAutoreleasePool?

您是否需要在GCD中的块中创建NSAutoreleasePool?
EN

Stack Overflow用户
提问于 2010-11-10 12:02:17
回答 1查看 11K关注 0票数 72

通常,如果您在NSOperationQueue上生成后台线程或运行NSOperation,则需要为该线程或操作创建一个NSAutoreleasePool,因为默认情况下不存在。

相同的规则是否适用于放置在中央分派队列中并将在非主线程上运行的块?也就是说,您是否需要在分派到主队列以外的任何其他块中创建一个NSAutoreleasePool?

在我有限的测试中,我没有看到自动释放对象的控制台警告,而你通常会在后台线程或NSOperations中看到。然而,我似乎找不到关于这方面的权威文档,所以我想知道是否有人可以指出这是在哪里陈述的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-10 13:18:22

是否相同的规则适用于放置在中央分派队列中并将在非主线程上运行的块?也就是说,您是否需要在分派到主队列以外的任何其他块中创建一个NSAutoreleasePool?

大中央调度将自动管理每个队列的自动释放池。但是,不能保证何时会排空该池;它可能是在一个块被处理之后,也可能是在数百个块之后(但可能不会)。

所以,如果你只分配了几个对象,不用担心。但是,如果您正在分配大量的对象(由于您的目标是内存受限的环境),那么您应该创建并排空池。

文档已更新。

请参阅https://developer.apple.com/library/content/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html#//apple_ref/doc/uid/TP40008091-CH102-SW1

如果您的块创建了多个Objective-C对象,您可能希望将块的部分代码包含在@autorelease块中,以处理这些对象的内存管理。尽管GCD调度队列有自己的自动释放池,但它们不能保证何时会耗尽这些池。如果您的应用程序是内存受限的,创建自己的自动释放池允许您以更固定的时间间隔为自动释放的对象释放内存。

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

https://stackoverflow.com/questions/4141123

复制
相关文章

相似问题

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