小编cin*_*cin的帖子

异步NSURLConnection,并发NSOperation,什么时候使用NSRunLoop?

我正在尝试在辅助线程中运行NSURLConnection async(目标是iOS4),为此我创建了一个并发的NSOperation,我想我差不多了,但我不清楚以下内容:

1)在iOS4中NSOperationQueue addOperation在新线程中启动操作,因为使用GCD,基于技术问答QA1712,但是,我的测试(模拟器和iPad)显示始终在主线程上调用start(),任何想法,我需要在这里检查:如果在主线程上然后产生一个新的?

2)如果通过addOperation()在辅助线程上实际调用了start,那么我可以通过在当前NSRunLoop上进行调度来启动我的异步NSURLConnection:

[self.connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[self.connection start];
Run Code Online (Sandbox Code Playgroud)

这里的LinkedImageFetcher示例,我不需要循环,直到完成:

do {
    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
} while (!isCompelted);
Run Code Online (Sandbox Code Playgroud)

3)假设我在主线程上调用自定义NSOperation start()并且2)是正确的,并且我在start()中生成一个新线程来调用我的自定义main()方法:

[NSThread detachNewThreadSelector:@selector(main) toTarget:self withObject:nil];
Run Code Online (Sandbox Code Playgroud)

在我的main()中,我需要运行当前的线程运行循环:

do {
    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
} while (!isCompelted);
Run Code Online (Sandbox Code Playgroud)

这是我在并发NSOperation中设法运行NSURLConnection的唯一实例,但我不确定我是否需要运行RunLoop,如果该线程由GCD提供为技术说明状态,我可以遵循逻辑2)或者我还需要运行线程的runloop吗?如何测试GCD提供的线程?

非常感谢任何解释

concurrency nsurlconnection nsoperation nsrunloop ios4

4
推荐指数
1
解决办法
7000
查看次数