同时使用多个 NSURLConnections - 最佳实践

Posted

技术标签:

【中文标题】同时使用多个 NSURLConnections - 最佳实践【英文标题】:Using multiple NSURLConnections at the same time - best practices 【发布时间】:2010-11-07 05:32:45 【问题描述】:

在我的 iPhone 应用程序中,我已经能够正确使用 NSURLConnection 从 URL 下载数据。我只是将delegate 设置为我的UIView,并确保我设置了UIView 来回答正确的委托功能,例如-connection:didReceiveResponse:。但是,如果我有许多 NSURLConnections(对于类似类型的请求或多种请求),它会变得混乱,因为诸如 didReceiveRequest 之类的委托函数不会区分不同的请求。异步请求的优点是您应该能够一次执行多个请求,而不会阻塞主线程。 如何同时使用多个 NSURLConnection 请求的最佳做法是什么?

【问题讨论】:

重复***.com/questions/203294/… 【参考方案1】:

我更喜欢将它们包装在具有所有每个连接/调用状态信息的更高级别的对象中(如ImageDownloaderSomeWebServiceCall)。我通常会为这些对象创建一个委托,以便调用者在操作成功或失败时获得更具体的回调。

【讨论】:

【参考方案2】:

也许看看ASIHTTPRequest,而不是NSURLConnection。 ASIHTTPRequest 使这项工作变得非常简单。

【讨论】:

【参考方案3】:

在这种情况下,我会说 NSOperation 是您最好的选择。 ASIHTTPRequest 基于 NSOperation 并允许您将每个请求作为一个操作来处​​理,该操作充当其自己的 NSURLConnection 的委托。

您必须在这里小心,因为默认情况下 NSOperations 在单独的线程上运行,但是一些 API,例如这个,需要在主线程上执行。如果您检查 ASIHTTPRequest 的源代码,您会注意到他们有一些基础设施来确保在主线程上调用委托方法。

【讨论】:

【参考方案4】:

为每个 NSURLConnection 和 NSMutableData 创建一个实例变量。您的所有委托方法都将 NSURLConnection 对象作为参数,因此您可以像这样匹配它们:

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
    if (connection == aConnection) 

       // Do something with the data for aConnection

     else if (connection == otherConnection) 

       // Do something with the data for otherConnection

    

这仍将您限制为每个实例变量一个连接,因此它不适合,例如,需要加载的每一行都有图像的表格视图。

【讨论】:

看日期,问题5年多了。如今NSURLSession 是最先进的。 我不知道为什么这会出现在我的提要中。我没有看日期。

以上是关于同时使用多个 NSURLConnections - 最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

NSURLConnection 是不是利用了 NSURLCache?

如何同时播放多个音频文件

使用 AVAudioPlayer 同时播放多个声音

使用testcafé,如何同时登录多个服务?

什么操作系统可以多个用户同时使用,就是一台主机 多个显示器、外设。能让多个人同时独立的操作计算机

使用 OpenSL ES Android 同时播放多个音效