首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iPhone上的同步NSURLConnection线程

iPhone上的同步NSURLConnection线程
EN

Stack Overflow用户
提问于 2009-12-24 06:17:19
回答 3查看 5.3K关注 0票数 0

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-24 08:48:21

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

让URL连接在后台线程中操作是保持UI响应的关键,异步NSURLOperation在默认情况下不会这样做(看看所有数据回调都是在哪个线程上进行的)。

有时您希望处理传入的数据(例如,如果您有一个进度条),在这种情况下,异步URL连接更好,它们仍然可以在NSOperation中。

因为这让你很沮丧,所以你很可能想看看同样基于NSOperation的替代ASIHTTPRequest库,但它似乎可以减轻你的痛苦(他们有很好的示例代码):

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

票数 2
EN

Stack Overflow用户

发布于 2009-12-24 06:30:16

NSURLConnection同步调用应该能够卡在后台线程中,但我强烈建议您处理“麻烦”,并以正确的方式™。在保持UI交互的同时检索数据的最好方法是使用NSURLConnection的异步方法。

票数 2
EN

Stack Overflow用户

发布于 2009-12-24 06:42:39

出于兴趣,您在获取数据时遇到了什么问题?我发现在完成后使用异步NSURLConnection和NSNotificaion是一个相当方便的解决方案。

在你需要数据的类中(我通常把它放在init方法中)

代码语言:javascript
复制
-(id)init{
    ... object setup ...
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateView) name:@"ScanCompleted" object:nil];
}

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

在NSURLConnection中

代码语言:javascript
复制
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

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

}

这对我来说非常有效- NSURLConnection是线程化的,所以UI不会被锁定,当数据下载完成时,它会更新。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1955620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档