6

共有ivarへのアクセスをシリアル化するためにGCDを使用するCAEAGLLayerの実行ループメソッドがあります。

私の描画コードは現在、次のように構成されています。

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

            [spriteA draw];
            [spriteB draw];

            [self drawingEnd];
        }
    });
}

このdrawメソッドは、CADisplayLinkによって呼び出されます。@autoreleasepoolGCDブロックを使用する場合は必要ですか?

4

2 に答える 2

23

アップルのドキュメントから:

ブロックが複数の Objective-C オブジェクトを作成する場合、ブロックのコードの一部を @autorelease ブロックで囲んで、それらのオブジェクトのメモリ管理を処理することができます。GCD ディスパッチ キューには独自の自動解放プールがありますが、これらのプールがいつ空になるかは保証されません。アプリケーションのメモリに制約がある場合、独自の自動解放プールを作成すると、より定期的に自動解放されたオブジェクト用にメモリを解放できます。

于 2012-09-25T16:26:44.560 に答える