0

ネストされた GCD ディスパッチ呼び出しから戻るにはどうすればよいですか?

次のようなメソッドがあるとします。

- (void)foo {

    dispatch_async(queue, ^{

        if (flag) { 
            // I want out of here
            return;
        }

        dispatch_sync(dispatch_get_main_queue(), ^{

            if (flag) { 
                // I want out of here
                return;
            }
        });
    });
}

関数内dispatch_syncで呼び出しているときは、現在の関数のみを残して、から再度return;呼び出す必要があると考えていますreturn;dispatch_async

4

1 に答える 1

1

はい、あなたの考えは正しいです。各ブロックは個別の関数であるため、return は現在のブロックからのみ返されます。dispatch_sync されたブロックがそうする場合に、dispatch_async されたブロックを早期に終了したい場合は、別のチェックが必要で、dispatch_sync の後に戻ります。

于 2012-12-28T20:59:25.847 に答える