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

时间:2010-11-07 05:32:45

标签: iphone ios nsurlconnection

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

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

或许查看ASIHTTPRequest,而不是NSURLConnection。 ASIHTTPRequest使这项工作很容易。

答案 2 :(得分:0)

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

但是你必须要小心,因为默认情况下NSOperations在不同的线程上运行,但是需要在主线程上执行某些API,比如这一个。如果你检查ASIHTTPRequest的源代码,你会发现他们有一些基础设施来确保在主线程上调用委托方法。

答案 3 :(得分:0)

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

-(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

    }
}

这仍然限制了每个实例变量的一个连接,因此它不适用于例如每行需要加载图像的表视图。