私はiOSの並行プログラミングについて学んでいます。これまでに読んだのはNSOperation
/NSOperationQueue
そしてGCD
over を使用する理由と、その逆の理由は何ですか?NSOperationQueue
GCD
GCD
どちらも、ユーザーからのNSOperationQueue
明示的な作成を抽象化しているようです。ただし、2 つのアプローチの関係は私には明確ではないので、フィードバックをいただければ幸いです。NSThreads
ベストアンサー1
GCD
は、タスクベースの並行処理モデルを非常に簡単に使用できる低レベルのCベースのAPIです。NSOperation
およびは、NSOperationQueue
同様のことを行うObjective-Cクラスです。が最初に導入されましたが、NSOperation
10.5そしてiOS 2、NSOperationQueue
およびフレンドは、内部的に を使用して実装されていますGCD
。
一般的に、ニーズに合った最高レベルの抽象化を使用する必要があります。つまり、 がサポートしていない操作を行う必要がない限り、通常はNSOperationQueue
の代わりにを使用する必要があります。GCD
NSOperationQueue
NSOperationQueue
は GCD の「簡易版」ではないことに注意してください。実際、NSOperationQueue
純粋な では多くの作業が必要になることが、では非常に簡単に実行できますGCD
。(例: 一度に N 個の操作のみを実行する帯域幅制限付きキュー、操作間の依存関係の確立。どちらも では非常に簡単ですがNSOperation
、 では非常に困難ですGCD
。) Apple は、GCD を活用して で非常に優れたオブジェクトフレンドリーな API を作成するという大変な作業を行いましたNSOperation
。そうしない理由がない限り、彼らの成果を活用してください。
注意: 一方、ブロックを送信するだけでよく、NSOperationQueue
提供される追加機能が必要ない場合は、GCD を使用しても問題ありません。ただし、それが適切なツールであることを確認してください。