每个自定义GCD队列都需要ARC下的自动释放池吗?

时间:2014-03-19 11:41:05

标签: memory-management grand-central-dispatch

例如,如果您创建自己的GCD队列:

self.renderQueue = dispatch_queue_create("com.test.queue", DISPATCH_QUEUE_SERIAL);

是否在提交到该队列的每个块中创建自动释放池,使用:

@autoreleasepool {

}

ARC是否为您创建了它?如果您未在自定义队列中指定autoreleasepool,会发生什么?

1 个答案:

答案 0 :(得分:6)

这取决于您对自动释放对象的使用情况。

每个GCD线程都有一个最外面的自动释放池,但是这个池在你无法直接控制的时候被耗尽(当前线程在空闲时就会消失,就在它自己停留在等待重用或收获的内核之前)。 / p>

如果您的进程长时间保持GCD线程处于活动状态和/或如果您在块中创建了大量自动释放的对象(或非常大的自动释放对象),您可能希望在块中创建一个池以确保这些对象占用的资源早先被释放。