{
dispatch_queue_t myQueue = dispatch_queue_create("com.mycompany.myqueue", 0);
dispatch_sync(myQueue, ^{
//Do EXTREME PROCESSING!!!
for (int i = 0; i< 100; i++) {
[NSThread sleepForTimeInterval:.05];
NSLog(@"%i", i);
}
dispatch_sync(dispatch_get_main_queue(), ^{
[self updateLabelWhenBackgroundDone];
});
});
}
ここでデッドロックが発生しています。アップルのドキュメントによると
"dispatch_sync": "同期実行のためにブロックをディスパッチ キューに送信します。dispatch_async とは異なり、この関数はブロックが完了するまで戻りません。この関数を呼び出して現在のキューをターゲットにすると、デッドロックが発生します。".
ただし、外側dispatch_sync
をオンにしてから、別のキュー「main_queue」でmyQueue
内側を実行します。ditpatch_sync
デッドロックの理由を見つけることができません。ここでコメント/ヘルプをいただければ幸いです。