4

つまり、同じものを数回キューに入れると、同時実行性がなくなります。最初にキューに入れたものが最初に実行されます。

つまり、メイン スレッドは 1 つしかありません。

4

3 に答える 3

6

ここでいい答えを見つけました:

NSOperationQueue と同時対非同時

したがって、常に設定できるすべての追加操作をシリアルにします。

[[NSOperationQueue mainQueue] setMaxConcurrentOperationCount:1];

于 2013-04-04T08:39:03.353 に答える
2

そして答えは... YESとNO

キューに追加する新しい NSOperation を作成するときは、次を使用できます

- (void)setQueuePriority:(NSOperationQueuePriority)priority

ドキュメントによると、キューはこの優先度と他の要因を相互依存関係として使用して、次に実行する操作を決定します。

操作の優先度が同じで、操作間の依存関係がない限り、それらは追加したのと同じ順序で実行する必要があります。おそらく、他のシステム関連の操作がそれらの間に挿入されます。

于 2013-04-04T08:42:43.193 に答える
1

ドキュメントから:

NSOperationQueueクラスは、一連のNSOperationオブジェクトの実行を規制します。キューに追加された操作は、明示的に取り消されるか、そのタスクの実行が終了するまで、そのキューに残ります。キュー内の (ただしまだ実行されていない) 操作は、優先度レベルと操作オブジェクト間の依存関係に従って編成され、それに応じて実行されます。アプリケーションは、複数の操作キューを作成し、それらのいずれかに操作を送信できます。

操作間の依存関係により、操作が異なる操作キューに配置されている場合でも、操作の絶対的な実行順序が提供されます。操作オブジェクトは、依存するすべての操作の実行が完了するまで、実行の準備ができているとは見なされません。実行の準備ができている操作の場合、操作キューは常に、他の準備ができている操作と比較して最も優先度の高い操作を実行します。優先度レベルと依存関係を設定する方法の詳細については、「NSOperation クラス リファレンス」を参照してください。

スレッドについて:

通常、操作を操作キューに追加して実行しますが、必須ではありません。start メソッドを呼び出して操作オブジェクトを手動で実行することもできますが、その場合、操作がコードの残りの部分と同時に実行されることは保証されません。クラスのisConcurrentメソッドはNSOperation、開始メソッドが呼び出されたスレッドに関して、操作が同期的に実行されるか非同期的に実行されるかを示します。デフォルトでは、このメソッドは NO を返します。これは、操作が呼び出しスレッドで同期的に実行されることを意味します

非同時操作を操作キューに送信すると、操作を実行するスレッドがキュー自体によって作成されます。したがって、非並行操作を操作キューに追加しても、操作オブジェクト コードは非同期で実行されます。

したがって、私が正しく理解している場合、ここには同時実行性はありません。

于 2013-04-04T08:37:05.090 に答える