ポイントは、クリス・ハンソンは、彼の記事「When to use NSOperation vs. GCD」で述べているものと同じである:
簡単な答えは、すべてのアプリケーション 開発のための一般的なガイドラインである:
常に使用します測定に「 」が必要であることが示されている場合は、下位レベルの抽象度にまで下げてください( )。
このケースでは、Cocoa アプリケーションを記述するときには、一般にGFCを使用して ではなくNSOperationを使用する必要があります。効率の違いによるものではなく、 NSOperationはGCDの メカニズムの上位レベルの抽象化を提供するためです。
一般に、私はこれに同意します。NSOperationとNSOperationQueueは、依存関係と、GCDブロックやキューにはない1つか2つのものをサポートし、並行処理の実装方法の詳細を抽象化しています。あなたがその機能を必要とするなら、NSOperationは非常に良い方法です。
しかし、両方で作業した後、自分のNSOperationベースのコードをすべてGCDブロックとキューに置き換えることができました。私はこれを2つの理由で行っています:頻繁なアクションにNSOperationを使用するとかなりのオーバーヘッドがあります.GCDブロックを使用すると、コードがよりクリーンで説明力があると思います。
最初の理由は私のアプリケーションのプロファイリングにあります。そこでは、OpenGL ESフレームを画面にレンダリングするような、頻繁ではないアクションに対処する際に、NSOperationオブジェクトの割り当てと割り当て解除処理にかなりのCPUリソースが必要でした。 GCDブロックはそのオーバヘッドを完全に排除し、パフォーマンスを大幅に向上させました。
第2の理由はより主観的ですが、私はNSOperationsよりもブロックを使用すると自分のコードがより洗練されていると思います。カスタムNSOperationサブクラスを作成する必要はなく、オペレーションに渡すパラメータをバンドルする必要がなく、私の意見ではより記述的なコードを使用する必要がないため、ブロックで許可されるスコープの迅速な取得とそのインラインの性質により、なぜなら、実行されるコードは、実行されるポイントでキューに置くことができるからです。
また、それは好みの問題ですが、私は自分自身が他の抽象化されたCocoaアプリケーションであっても、GCDをより多く使用していることを発見しました。
https:// cocoacasts。 – Masih