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

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

【问题讨论】:

标签: iphone ios nsurlconnection


【解决方案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 是最先进的。
        • 我不知道为什么这会出现在我的提要中。我没有看日期。
        猜你喜欢
        • 2011-11-29
        • 2013-07-17
        • 1970-01-01
        • 2019-12-26
        • 2012-05-03
        • 1970-01-01
        • 2019-03-23
        • 2015-09-01
        • 2011-01-23
        相关资源
        最近更新 更多