はい、知っています。世界についてはたくさんの質問と回答がありますNSOperation
が、私はまだいくつかの疑問を持っています。Il'は、2つの部分からなる質問で私の疑問を説明しようとします。それらは互いに関連しています。
SO post nsoperationqueue-and-concurrent-vs-non-concurrentで、Darrenは次のように書いています。
「並行」操作は、それ自体が並行です。スレッドを作成するためにNSOperationQueueは必要ありません。
しかし、少し調べてみるとNSOperation
、同時宣言されていても(isConcurrent
returnsなどのメソッドをオーバーライドするYES
ことで)、に追加できることがわかりましたNSOperationQueue
。これは何を意味するのでしょうか?コンカレントNSOperation
をキューに追加すると、内部で何が起こっているのでしょうか。逆に、(キューに追加せずに)並行操作をそのまま使用するとどうなりますか?
Appleのドキュメントから取ったメモは明確です:
...操作キューはisConcurrentによって返される値を無視し、常に別のスレッドから操作のstartメソッドを呼び出します。...一般に、操作キューで操作を常に使用している場合、それらを同時に実行する理由はありません。
次に、で非同期パターンを使用することに本当に興味がありNSOperation
ます。Dave Dribin(並行操作)による優れたチュートリアルを見つけました。私は彼のポストの全体的な意味を理解しました。
デリゲートを呼び出すことができなかったため、非同期パターンを使用することはできません(たとえば、非同期NSURLConnection
要求を使用する)。終了するmain
と、操作は削除されます。解決策は、メソッドをオーバーライドしstart
て操作のライフサイクルを制御することです...そして実行ループの処理は面倒な場合があります。
今、彼の投稿を理解しようとすると、私の疑問はstart
、メインスレッドでメソッドを実行する必要があることです。
- (void)start
{
if (![NSThread isMainThread])
{
[self performSelectorOnMainThread:@selector(start) withObject:nil waitUntilDone:NO];
return;
}
// other code here...
}
非同期APIを処理する場合、開始時にメインスレッドで非同期呼び出しを開始し、終了するまで操作を実行し続けることができます。
理由を教えていただけますか?
前もって感謝します。