[Objective-C]同期処理⇄非同期処理
同期処理を非同期にする。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//処理
});
非同期処理を同期処理にする。
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//処理
dispatch_semaphore_signal(semaphore);
});
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
セマフォカウンタを0で初期化、waitをするとカウンタがマイナスされて-1になり、-1になるとそのスレッドの処理が停止する。
signalをするとカウンタをプラスして0になり、処理が続行される。