1. ホーム
  2. ios

[解決済み] NSOperationとGrand Central Dispatchの比較

2022-03-22 12:57:03

質問

iOSの並行処理プログラミングについて勉強しています。今までのところ NSOperation / NSOperationQueue GCD . を使用する理由は何ですか? NSOperationQueue オーバー GCD その逆は?

両方のように聞こえる GCDNSOperationQueue の明示的な作成を抽象化します。 NSThreads を使用します。しかし、この2つのアプローチの関係は、私には明確ではありません。

どのように解決するのですか?

GCD は、タスクベースの並行処理モデルを非常にシンプルに使用できる、低レベルのCベースAPIです。 NSOperationNSOperationQueue は、同じようなことをするObjective-Cのクラスです。 NSOperation が最初に導入されましたが、現在では 10.5 iOS 2 , NSOperationQueue とフレンドは、内部的には GCD .

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

なお NSOperationQueue はGCDのquot;dumbed-down"バージョンではありません。 NSOperationQueue を使用する場合、多くの作業を必要とします。 GCD . (例: 一度に N 個の処理しか実行できない帯域幅に制約のあるキュー、処理間の依存関係の確立など。どちらも NSOperation を使用すると、非常に困難です。 GCD .) Appleは、GCDを活用して、非常に素晴らしいオブジェクトフレンドリーなAPIを作るという大変な仕事をしました。 NSOperation . 特に理由がない限り、彼らの仕事を利用してください。

注意事項 : 一方、本当にブロックを送るだけでよくて NSOperationQueue GCDを使うのは悪いことではありません。ただ、それがその仕事に適したツールであることを確認してください。