通常,如果您在NSOperationQueue上生成后台线程或运行NSOperation,则需要为该线程或操作创建NSAutoreleasePool,因为默认情况下不存在 .
相同的规则是否适用于放置在Grand Central Dispatch队列中并将在非主线程上运行的块?也就是说,您是否需要在每个块中创建一个NSAutoreleasePool,并将其分派给主队列以外的任何其他块?
在我的有限测试中,我没有看到通常在后台线程或NSOperations中看到的自动释放对象的控制台警告 . 但是,我似乎无法找到关于此的明确文档,所以我想知道是否有人可以指出这里的陈述 .
1 回答
Grand Central dispatch将自动管理每个队列的自动释放池 . 但是,无法保证游泳池的排水时间;可能是在处理了一个块之后,它可能在数百个之后(但可能不会) .
因此,如果您只分配一些对象,请不要担心 . 但是,如果要分配任意数量的对象(并且因为您的目标是内存受限环境),那么您应该创建和排空池 .
文档已更新 .
见https://developer.apple.com/library/content/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html#//apple_ref/doc/uid/TP40008091-CH102-SW1