2

現在実行中のスレッドでNSOperationを同期的に実行したい。[NSOperation start]を呼び出すだけでいいですか?これは常に現在実行中のスレッドで実行されますか?

別の方法は、NSOperationQueueを作成し、操作を追加してから、waitUntilAllOperationsFinishedセレクターを呼び出すことです。

4

1 に答える 1

4

を呼び出すと[NSOperation start]、現在のスレッドで同期的に実行されます。操作に関連するすべての非同期作業は によって処理されますが、自分自身をNSOperationQueue呼び出している場合は-start、そのすべてをバイパスしています。

もちろん、特定のNSOperationサブクラスを実装して、別のスレッドで非同期タスク自体を生成することもできます。それは完全にそれ次第です。ただし、操作キューが実行されるスレッドで同期的に実行されるように設計された操作は、 を呼び出すと、スレッドでも同期的に実行されます-start


たとえば、次のコードを実行すると、次のようになります。

NSOperation *op = [NSBlockOperation blockOperationWithBlock:^{
    NSLog(@"operation");
}];
[op start];
NSLog(@"complete");

プリント:

operation
complete
于 2012-12-13T03:07:19.237 に答える