Memory management 是否每个自定义GCD队列都需要ARC下的自动释放池?

Memory management 是否每个自定义GCD队列都需要ARC下的自动释放池?,memory-management,grand-central-dispatch,Memory Management,Grand Central Dispatch,例如,如果您创建自己的GCD队列: self.renderQueue = dispatch_queue_create("com.test.queue", DISPATCH_QUEUE_SERIAL); 是否必须在提交到该队列的每个块中创建自动释放池,使用: @autoreleasepool { } ? 还是ARC为您创建了它?如果在自定义队列中未指定autoreleasepool,会发生什么情况?这取决于您对autoreleased对象的使用情况 每个GCD线程都有一个最外层的自动释放池,

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

self.renderQueue = dispatch_queue_create("com.test.queue", DISPATCH_QUEUE_SERIAL);
是否必须在提交到该队列的每个块中创建自动释放池,使用:

@autoreleasepool {

}
?


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

这取决于您对autoreleased对象的使用情况

每个GCD线程都有一个最外层的自动释放池,但该池在您无法直接控制的时间被耗尽(当前,当线程空闲时,在它将自身停在内核中等待重用或收获之前,就会发生耗尽)


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

如果您使用的是Realm,则绝对建议这样做。请参阅针对iOS 10更新的“我的答案”+