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

iam*_*mer 3 memory-management grand-central-dispatch

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

self.renderQueue = dispatch_queue_create("com.test.queue", DISPATCH_QUEUE_SERIAL);
Run Code Online (Sandbox Code Playgroud)

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

@autoreleasepool {

}
Run Code Online (Sandbox Code Playgroud)

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

das*_*das 6

这取决于您对自动释放对象的使用.

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

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