Я пытаюсь запустить NSURLConnection async во вторичном потоке (цель - iOS4), для этого я создал параллельную NSOperation, я думаю, что я почти там, но мне не ясно следующее:
1) в iOS4 NSOperationQueue addOperation запускает операцию в новом потоке из-за использования GCD на основе Технические вопросы и ответы QA1712 , однако, мои тесты (симулятор и iPad) показывают, что start () всегда вызывается в главном потоке, любая идея, нужна ли здесь проверка: если в главном потоке появляется новый?
2) если запуск был фактически вызван во вторичном потоке с помощью addOperation (), то я мог бы запустить асинхронное NSURLConnection, запланировав текущий NSRunLoop:
[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);
Это единственный экземпляр, в котором мне удалось запустить NSURLConnection в параллельной NSOperation, но я не уверен, что мне действительно нужно запустить RunLoop, если поток был предоставлен GCD как состояние технических примечаний, могу ли я следуйте логике в 2) или мне все равно придется запускать цикл выполнения потока? Как я могу проверить поток, предоставленный GCD?
Большое спасибо за любое разъяснение