NSURLConnection和制作异步请求的不同方式

时间:2013-07-14 09:38:50

标签: ios http rest asynchronous nsurlconnection

我需要通过HTTP和HTTPS与RESTful服务进行通信。我正在阅读一些关于通过NSURLConnection类执行异步请求的示例,其中一些使用sendAsynchronousRequest:queue:completionHandler:方法,另一些使用connectionWithRequest:delegate:方法并实现NSURLConnectionDelegate } 方法。我无法弄清楚这些方法的含义是什么,如果差异仅在于实施,但性能和结果是相同的,或者其中一种方法比其他方法更好或更正确......

谢谢!

1 个答案:

答案 0 :(得分:0)

通常有两个不同之处。

  • 首先,两种方法的返回类型。 [NSURLConnection sendAsynchronousRequest:queue:completionHandler:]具有返回类型 void表示您无法捕获NSURLConnection,例如在 一个财产,所以你失去了一些控制权,即你不能 [NSURLConnection cancel]它。另一方面,[NSURLConnection connectionWithRequest:delegate:]确实会将连接返回给您,因此您可以保留完全控制权。
  • 其次,如果您正在下载大文件,则基于块的方法 将数据加载到内存中并在块时“传递”它 执行。假设一个小的RESTful答案,这可能对你没问题。 但是,如果您要下载大文件,则可能需要编写 传入的数据直接进入文件句柄以减少内存 消费。为此,您需要委托方法 [NSURLConnectionDataDelegate connection:didReceiveData:]。可悲的是 在当前的Apple文档中,NSURLConnectionDataDelegate文档并不容易链接。 如果您将自己设置为NSURLConnection的代表,那些 方法将被调用。

希望这有帮助。