NSOperation vs Grand Central Dispatch 質問する

NSOperation vs Grand Central Dispatch 質問する

私はiOSの並行プログラミングについて学んでいます。これまでに読んだのはNSOperation/NSOperationQueueそしてGCDover を使用する理由と、その逆の理由は何ですか?NSOperationQueueGCD

GCDどちらも、ユーザーからのNSOperationQueue明示的な作成を抽象化しているようです。ただし、2 つのアプローチの関係は私には明確ではないので、フィードバックをいただければ幸いです。NSThreads

ベストアンサー1

GCDは、タスクベースの並行処理モデルを非常に簡単に使用できる低レベルのCベースのAPIです。NSOperationおよびは、NSOperationQueue同様のことを行うObjective-Cクラスです。が最初に導入されましたが、NSOperation10.5そしてiOS 2NSOperationQueueおよびフレンドは、内部的に を使用して実装されていますGCD

一般的に、ニーズに合った最高レベルの抽象化を使用する必要があります。つまり、 がサポートしていない操作を行う必要がない限り、通常はNSOperationQueueの代わりにを使用する必要があります。GCDNSOperationQueue

NSOperationQueueは GCD の「簡易版」ではないことに注意してください。実際、NSOperationQueue純粋な では多くの作業が必要になることが、では非常に簡単に実行できますGCD。(例: 一度に N 個の操作のみを実行する帯域幅制限付きキュー、操作間の依存関係の確立。どちらも では非常に簡単ですがNSOperation、 では非常に困難ですGCD。) Apple は、GCD を活用して で非常に優れたオブジェクトフレンドリーな API を作成するという大変な作業を行いましたNSOperation。そうしない理由がない限り、彼らの成果を活用してください。

注意: 一方、ブロックを送信するだけでよく、NSOperationQueue提供される追加機能が必要ない場合は、GCD を使用しても問題ありません。ただし、それが適切なツールであることを確認してください。

おすすめ記事