0

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

谢谢!

4

1 回答 1

0

有两个差异通常是关键。

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

希望这可以帮助。

于 2013-07-14T10:49:13.150 回答