2010-11-07 13 views
0

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

+0

重复http://stackoverflow.com/questions/203294/multiple-nsurlconnection-delegates-in-objective-c – 2010-11-07 05:37:05

回答

0

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

0

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

0

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

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

0

为每个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 

    } 
} 

这仍然限制你每个实例变量的一个连接,所以它不适合,例如,表在每行需要加载的图像上查看图像。

+0

看看日期,问题已经超过5年了。现在'NSURLSession'是最先进的。 – vadian 2016-01-13 14:01:48

+0

我不知道为什么这会出现在我的Feed中。我没有看日期。 – nickdnk 2016-01-13 14:02:48