Appleのドキュメントに従った簡単なテストケースを作成しましたが、期待した結果が得られません。
コードは次のとおりです。
- (void)testExample2
{
NSLog(@"1");
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"3");
dispatch_semaphore_signal(semaphore);
});
NSLog(@"2");
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
NSLog(@"4");
dispatch_release(semaphore);
}
1、2、3、4と読みたいと思いますが、代わりにコンソールに1、3と表示されます。
DISPATCH_TIME_NOW
NSLoopハックと一緒にwhileループを使用して問題を回避することができましたが、上記のコードはある程度機能するはずです...そうですか?
乾杯...
アップデート
代わりに別のキューを使用する必要があることに気づきましたdispatch_main_queue()