セカンダリ スレッド (ターゲットは iOS4) で NSURLConnection 非同期を実行しようとしています。
1) iOS4 NSOperationQueue addOperation では、 Technical Q&A QA1712に基づいて、GCD を使用しているため、新しいスレッドで操作を開始しますが、私のテスト (シミュレーターと iPad) は、start() が常にメイン スレッドで呼び出されることを示しています。アイデア、ここでチェックが必要ですか:メインスレッドで新しいものを生成する場合?
2) addOperation() によってセカンダリ スレッドで start が実際に呼び出された場合、現在の NSRunLoop でスケジュールすることにより、非同期 NSURLConnection を開始できます。
[self.connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[self.connection start];
ここの LinkedImageFetcher の例のように、次のように完了するまでループする必要はありません。
do {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
} while (!isCompelted);
3) カスタム NSOperation start() がメイン スレッドで呼び出され、2) が正しいと仮定すると、start() で新しいスレッドを生成して、次のようにカスタム main() メソッドを呼び出します。
[NSThread detachNewThreadSelector:@selector(main) toTarget:self withObject:nil];
私の main() では、現在のスレッド実行ループを実行する必要があります。
do {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
} while (!isCompelted);
これは、並行 NSOperation で NSURLConnection を実行できた唯一のインスタンスですが、技術ノートの状態としてスレッドが GCD によって提供された場合、RunLoop を実行する必要があるかどうかはわかりません。ロジックに従うことができますか? 2)またはスレッドの実行ループを実行する必要がありますか?GCD が提供するスレッドをテストするにはどうすればよいですか?
説明してくれてありがとう