是否有必要在GCD下创build一个autorelease池?

我有一个CAEAGLLayer的运行循环方法,它使用GCD序列化访问共享ivars。

我的绘图代码目前是这样构造的:

- (void)draw { dispatch_sync(serialDrawingQueue, ^{ @autoreleasepool { [self drawingStart]; [spriteA draw]; [spriteB draw]; [self drawingEnd]; } }); } 

draw方法由CADisplayLink调用。 我使用GCD块时需要@autoreleasepool吗?

从苹果文档 :

如果您的块创build了多个Objective-C对象,则可能需要将块的部分代码放在@autorelease块中,以处理这些对象的内存pipe理。 虽然GCD调度队列有他们自己的autorelease池 ,他们不保证什么时候这些池被耗尽。 如果您的应用程序受到内存限制,创build您自己的自动释放池允许您以更有规律的间隔释放自动释放对象的内存。

在iOS 10或更高版本中,派发队列在@autoreleasepool默认不再包围块。 这由queue.h定义的DISPATCH_QUEUE_SERIAL_WITH_AUTORELEASE_POOLDISPATCH_QUEUE_CONCURRENT_WITH_AUTORELEASE_POOLmacrosqueue.h