NSOperation A と NSOperation B があるとします。B は、A.completionBlock
呼び出されて終了した結果として A が終了し、セットアップを実行することに依存しています。これは、B.addDependency(A)
A が終了するまで B を構築できないため、 を使用できないことを意味します。したがってA.waitUntilFinished()
、B を構築して開始する前に別のスレッドで使用することを選択します。
ただし、A の completionBlock は別のスレッドで呼び出されるため、ブロックを解除する前に呼び出したスレッドA.waitUntilFinished()
は実行 A.completionBlock
を終了しているため、B の構築時に必要な前提条件が完了していません。
Apple NSOperation API は がディスパッチされる場所を制御できないため、A.completionBlock
この問題を処理する通常の方法は何ですか?
編集:
これまでに試したオプションは、NSOperation B を NSBlockOperation C でラップし、C.addDependency(A)
A が終了するまで B が構築されないように呼び出すことです。ただし、NSBlockOperation C 内で非同期開始を呼び出す必要があり、完了ブロックが別のスレッドに飛ぶため、これでも問題は解決しません。