Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 同时使用多个NSURLConnection-最佳实践_Iphone_Ios_Nsurlconnection - Fatal编程技术网

Iphone 同时使用多个NSURLConnection-最佳实践

Iphone 同时使用多个NSURLConnection-最佳实践,iphone,ios,nsurlconnection,Iphone,Ios,Nsurlconnection,在我的iPhone应用程序中,我能够正确使用NSURLConnection从URL下载数据。我只需将委托设置为我的UIView,并确保我设置了UIView以响应适当的委托函数,例如-connection:didReceiveResponse:。但是,如果对于类似类型的请求或多种类型的请求,我有许多NSURLConnections,则会变得很混乱,因为委托函数(如didReceiveRequest)不会区分不同的请求。异步请求的优点是,您应该能够同时执行多个请求,而不会阻塞主线程。如何同时使用多个

在我的iPhone应用程序中,我能够正确使用NSURLConnection从URL下载数据。我只需将委托设置为我的UIView,并确保我设置了UIView以响应适当的委托函数,例如-connection:didReceiveResponse:。但是,如果对于类似类型的请求或多种类型的请求,我有许多NSURLConnections,则会变得很混乱,因为委托函数(如didReceiveRequest)不会区分不同的请求。异步请求的优点是,您应该能够同时执行多个请求,而不会阻塞主线程。如何同时使用多个NSURLConnection请求的最佳实践是什么?

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

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

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


不过,在这里您必须小心,因为默认情况下,NSO操作是在单独的线程上运行的,但是像这样的一些API需要在主线程上执行。如果您检查ASIHTTPRequest的源代码,您会注意到它们有一些基础结构,以确保在主线程上调用委托方法。

为每个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是最先进的。我不知道为什么它会出现在我的feed中。我没有看日期。