22

GCD、、、NSThreadおよびの 3 つのオプションがあるため、iOS でマルチスレッド化する最良の方法は何NSOperationQueueですか? どれが一番いいのか迷っています。ない場合は、どのシナリオでどのように使用する必要があり、どのように異なるか、また、誰かが を使用する良い例を持っている場合はNSOperationQueue、私が学べるように共有してください。

4

2 に答える 2

44

簡単な答え:

  1. 作成したスレッドを直接制御したい、または制御する必要がある場合は、NSThread (または pthreads API も) を使用します。それと同じページにとどまる必要があります。このような例はまれですが、特にリアルタイム アプリケーションでは発生します。

  2. タスクが単純な並列化に適している場合は、GCD を使用します。たとえば、追加の作業をほとんど行わずに作業を「バックグラウンドに」放り込みたい場合や、アクセスをシリアル化するだけのデータ構造がある場合 (シリアル キューは優れています)ロックレスな方法でそれを行うため)、dispatch_apply() との並列化に適した for ループがいくつかあり、GCD のソース API を使用してバックグラウンドで簡単に処理できるようにするいくつかのデータ ソース / タイマーなどがあります。 . GCD は非常に強力で、これよりもはるかに多くの用途に使用できますが、これらはすべて、初期化とセットアップのタスクに巻き込まれたくない相対的な「簡単な」シナリオです。並行して行う」。

  3. すでに Cocoa API 層に達していて (POSIX API に直接 C で記述しているのに対して)、並列化したいより複雑な操作がある場合は、NSOperation を使用します。NSOperation は、サブクラス化、任意に複雑な依存関係グラフ、キャンセルを可能にし、役に立つかもしれない他の多くの高レベルのセマンティクスをサポートします。NSOperation は実際には内部で GCD を使用しているため、GCD と同じようにマルチコア、マルチスレッドに対応していますが、Foundation フレームワークも一緒に使用できるため、POSIX レイヤーをハッキングしている場合は、おそらく使用したいと思うでしょう。オプション#2。

ただし、他の人が言ったように、それはすべてあなたが何をしようとしているのかに依存するため、あなたの質問に対する単一の、または普遍的に正しい答えさえありません.

于 2012-10-22T17:55:49.230 に答える