私はGCDとスレッド化に非常に慣れていません。私はチュートリアルを通り抜けて、非常に混乱しました。誰かが簡単な言葉で説明できますか。Apple開発者リンクを提案しないでください。
前もって感謝します !
NSOperationQueueは、キャンセルする必要がある、または複雑な依存関係を持つ可能性のある長時間実行操作に適しています。 GCDディスパッチキューは、パフォーマンスとメモリのオーバーヘッドを最小限に抑える必要がある短いタスクに適しています。
NSOperationQueueにエンキューされた操作をキャンセルすることができます(操作がサポートしている場合)。ブロックをGCDディスパッチキューにエンキューすると、ある時点で確実に実行されます。
以下のリンクを確認してください、それはあなたに役立つかもしれません。
GCD
はNSOperationQueue
よりも低レベルであり、その主な利点は、その実装が非常に軽量であり、ロックフリーのアルゴリズムとパフォーマンスに重点を置いていることです。
一般に、ニーズに合った最高レベルの抽象化を使用する必要があります。つまり、通常はNSOperationQueue
の代わりにGCD
を使用する必要があります。 NSOperationQueue
を使用すると、操作の実行方法をより細かく制御できます。
操作必要なときに特定の操作をキャンセルしたり、すべての操作を同時にキャンセルしたりできるように、タスクをより細かく制御できます。しかし、これと同じことはできませんディスパッチキューを使用して。
さらにディスパッチキュー[〜#〜] fifo [〜#〜]の概念に取り組んでいますが、操作はではありません。
操作の場合、タスクに優先順位を付け、優先順位を定義することで、最初に実行するタスクと最後に実行するタスクなどを制御できます。
これは、「queuePriority」という名前のプロパティを非常に低い、低い、通常、高い、非常に高いに設定することによって行われます。他の多くのそのようなことは、操作を使用して実行でき、ディスパッチキューでは実行できません。
操作デフォルトでは同時であるため、シリアルに実行することはできませんしかしこれは、操作2が操作1に依存しているように、操作の相互依存関係を追加することによっても実現できます。 および操作3は操作2に依存します。したがって、これを行うことにより、それらはシリアルに実行されます。