このメソッドが呼び出されると、現在のスレッドがブロックされ、レシーバーの現在のキューに入れられた操作が実行を終了するのを待ちます。現在のスレッドがブロックされている間、レシーバーはすでにキューに入れられている操作を開始し、実行中の操作を監視し続けます。この間、現在のスレッドはキューに操作を追加できませんが、他のスレッドは追加できます。保留中のすべての操作が終了すると、このメソッドは戻ります。
そのような動作を可能にするwaitUntilAllOperationsAreFinishedの背後にあるコードは何ですか(現在のスレッドをブロックし、レシーバーは続行します...)?私は同様の動作を生成するコードを書くことに興味があるので、同様の動作をする同等の(ええ、Appleは私にとってブラックボックス化されています)コードに感謝します。
より具体的には、NSOperationQueueはどのようにスレッドをブロックし、同時にレシーバーがその処理を実行できるようにしますか(私の推測:currentRunLoopの実行中にセマフォをディスパッチします)?
ありがとう!