在iPhone上同步NSURLConnection线程

时间:2009-12-23 22:17:19

标签: iphone multithreading http nsurlconnection synchronous

我开始使用异步,但是为了获得返回的数据变得麻烦。然后我开始使用类方法,我相信,它排除了使用委托方法的可能性。所以我保持同步,知道这将是一个问题,但不认为我会有一个解决方案的这么多困难。在保持UI可交互的同时检索数据的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

NSURLConnection同步调用应该能够卡在后台线程中,但我强烈建议你处理'麻烦',然后做正确的方法。在保持UI交互的同时检索数据的最佳方法是使用NSURLConnection的异步方法。

答案 1 :(得分:2)

同步NSURLConnections在NSOperation中运行良好 - 并且因为你同步使用它们,NSOperationQueue交给NSOperations将自动使用后台线程来运行它们(否则你必须做额外的工作)。

让URL连接在后台线程中运行是保持UI响应的关键,这是异步NSURLOperation默认不执行的操作(查看数据回调所引入的线程)。

有时你想处理传入的数据(比如你有进度条),在这种情况下,异步URL连接更好,它们仍然可以在NSOperation中。

因为这令你感到沮丧,你可能还想看一下替代的ASIHTTPRequest库,也基于NSOperation,但似乎它可能会让你的一些不那么痛苦(他们有很好的示例代码):< / p>

http://allseeing-i.com/ASIHTTPRequest/

答案 2 :(得分:1)

出于兴趣,您在获取数据时遇到了什么问题?我发现使用异步NSURLConnection和NSNotificaion,它已经完成了非常方便的解决方案。

在您需要数据的类中(我通常将其放在init方法中)

-(id)init{
    ... object setup ...
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateView) name:@"ScanCompleted" object:nil];
}

updateView是连接完成接收数据时要调用的方法

NSURLConnection中的

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

//Notify that we are finished
[[NSNotificationCenter defaultCenter] postNotificationName:soapAction object:self];

}

这对我很有用 - NSURLConnection是线程化的,因此UI不会锁定,并在数据下载完成后更新。