我开始使用异步,但是为了获得返回的数据变得麻烦。然后我开始使用类方法,我相信,它排除了使用委托方法的可能性。所以我保持同步,知道这将是一个问题,但不认为我会有一个解决方案的这么多困难。在保持UI可交互的同时检索数据的最佳方法是什么?
答案 0 :(得分:2)
NSURLConnection同步调用应该能够卡在后台线程中,但我强烈建议你处理'麻烦',然后做正确的方法。在保持UI交互的同时检索数据的最佳方法是使用NSURLConnection的异步方法。
答案 1 :(得分:2)
同步NSURLConnections在NSOperation中运行良好 - 并且因为你同步使用它们,NSOperationQueue交给NSOperations将自动使用后台线程来运行它们(否则你必须做额外的工作)。
让URL连接在后台线程中运行是保持UI响应的关键,这是异步NSURLOperation默认不执行的操作(查看数据回调所引入的线程)。
有时你想处理传入的数据(比如你有进度条),在这种情况下,异步URL连接更好,它们仍然可以在NSOperation中。
因为这令你感到沮丧,你可能还想看一下替代的ASIHTTPRequest库,也基于NSOperation,但似乎它可能会让你的一些不那么痛苦(他们有很好的示例代码):< / p>
答案 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不会锁定,并在数据下载完成后更新。