Ios 是否需要在GCD中的ARC下创建自动释放池?
我有一个CaeAglayer的运行循环方法,它使用GCD序列化对共享IVAR的访问 我的图形代码当前的构造如下:Ios 是否需要在GCD中的ARC下创建自动释放池?,ios,memory-management,concurrency,automatic-ref-counting,grand-central-dispatch,Ios,Memory Management,Concurrency,Automatic Ref Counting,Grand Central Dispatch,我有一个CaeAglayer的运行循环方法,它使用GCD序列化对共享IVAR的访问 我的图形代码当前的构造如下: - (void)draw { dispatch_sync(serialDrawingQueue, ^{ @autoreleasepool { [self drawingStart]; [spriteA draw]; [spriteB draw]; [self d
- (void)draw {
dispatch_sync(serialDrawingQueue, ^{
@autoreleasepool {
[self drawingStart];
[spriteA draw];
[spriteB draw];
[self drawingEnd];
}
});
}
draw
方法由CADisplayLink调用。
当我使用GCD块时,是否需要使用@autoreleasepool
如果块创建多个Objective-C对象,则可能
要将块的部分代码包含在@autorelease块中,以
处理这些对象的内存管理尽管GCD
调度队列有自己的自动释放池,它们不会
保证这些水池何时排水。如果你的申请是
内存受限,创建自己的自动释放池允许您
以更规则的间隔释放自动释放对象的内存
似乎在iOS10或更高版本中,
@autoreleasepool
中的调度队列在默认情况下不再围绕块。这是由DISPATCH\u QUEUE\u SERIAL\u WITH\u AUTORELEASE\u POOL
和DISPATCH\u QUEUE\u CONCURRENT\u WITH\u AUTORELEASE\u POOL
中定义的宏来指示的,您可以试试,看看是否得到“没有池在适当位置……只是泄漏!”错误消息?显然最好询问更有经验的开发人员这是否是个好主意。