我一开始使用异步,但是获取返回的数据变得很麻烦。然后我开始使用类方法,我相信这排除了使用委托方法的可能性。所以我一直保持同步,知道这会是一个问题,但没有想到我在解决方案上会有这么大的困难。在保持UI可交互性的同时检索数据的最佳方法是什么?
发布于 2009-12-24 08:48:21
同步NSURLConnections在NSOperation中工作得很好-因为你是同步使用它们的,一个交给NSOperations的NSOperationQueue将自动使用一个后台线程来运行它们(否则你必须做额外的工作)。
让URL连接在后台线程中操作是保持UI响应的关键,异步NSURLOperation在默认情况下不会这样做(看看所有数据回调都是在哪个线程上进行的)。
有时您希望处理传入的数据(例如,如果您有一个进度条),在这种情况下,异步URL连接更好,它们仍然可以在NSOperation中。
因为这让你很沮丧,所以你很可能想看看同样基于NSOperation的替代ASIHTTPRequest库,但它似乎可以减轻你的痛苦(他们有很好的示例代码):
http://allseeing-i.com/ASIHTTPRequest/
发布于 2009-12-24 06:30:16
NSURLConnection同步调用应该能够卡在后台线程中,但我强烈建议您处理“麻烦”,并以正确的方式™。在保持UI交互的同时检索数据的最好方法是使用NSURLConnection的异步方法。
发布于 2009-12-24 06:42:39
出于兴趣,您在获取数据时遇到了什么问题?我发现在完成后使用异步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不会被锁定,当数据下载完成时,它会更新。
https://stackoverflow.com/questions/1955620
复制相似问题