2

メインスレッドに関連付けられた管理対象オブジェクトコンテキストがあり、メインスレッドを呼び出すと[mainContext performBlock:block]します。それは同期的に実行されますか、それともまだスケジュールされて後で実行されますか?

4

1 に答える 1

3

あなたが意味していると仮定するとNSMainQueueConcurrencyType(ではなくNSConfinementConcurrencyType)、呼び出しperformBlock:はのように動作dispatch_asyncします。つまり、ブロックはキューに入れられ、すぐには実行されません。

これは簡単に確認できます。

NSLog(@"before block");
[self.managedObjectContext performBlock:^{
    NSLog(@"in block");
}];
NSLog(@"after block");

これは(この順序で)印刷されます:

before block
after block
in block

ブロックを同期的に実行する必要がある場合はperformBlockAndWait:、両方のキューベースの同時実行タイプに使用する必要があります。

于 2013-01-27T11:22:28.103 に答える