我正在尝试在辅助线程中运行 NSURLConnection 异步(目标是 iOS4),为此我创建了一个并发 NSOperation,我想我快到了,但不清楚以下内容:
1) 在 iOS4 NSOperationQueue addOperation 在新线程中开始操作,因为使用 GCD,基于Technical Q&A QA1712但是,我的测试(模拟器和 iPad)显示 start() 总是在主线程上调用,任何想法,我需要在这里检查一下:如果在主线程上然后产生一个新线程?
2) 如果 start 实际上是通过 addOperation() 在辅助线程上调用的,那么我可以通过在当前 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 的唯一实例,但我不确定我是否需要运行 RunLoop,如果 GCD 作为技术说明状态提供线程,我可以按照逻辑在 2) 中还是我仍然需要运行线程的 runloop?如何测试 GCD 提供的线程?
非常感谢您的任何说明