Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 是否需要在GCD中的ARC下创建自动释放池?_Ios_Memory Management_Concurrency_Automatic Ref Counting_Grand Central Dispatch - Fatal编程技术网

Ios 是否需要在GCD中的ARC下创建自动释放池?

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

我有一个CaeAglayer的运行循环方法,它使用GCD序列化对共享IVAR的访问

我的图形代码当前的构造如下:

- (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
中定义的宏来指示的,您可以试试,看看是否得到“没有池在适当位置……只是泄漏!”错误消息?显然最好询问更有经验的开发人员这是否是个好主意。