我正在编写一个cocoa应用程序,我想从Web服务器下载文件。这样做最方便的方法是什么?我应该进入NSSockets还是NSUrlRequest?或者还有其他更简单的方法来实现这一目标吗?
答案 0 :(得分:5)
如果要将文件内容加载到内存中,许多Cocoa数据类(如NSString,NSData甚至NSDictionary)都有initWithURL:
方法,这些方法直接使用Web请求的内容进行初始化。它们非常易于使用,但它们不是非常灵活或提供良好的错误处理。如果需要,NSURLConnection可以更灵活地加载数据。
如果您想将文件直接下载到磁盘,那么NSURLDownload将是最好的选择。
答案 1 :(得分:2)
警告:initWithURL:方法是阻塞,如果文件很大,服务器很慢,用户的互联网连接速度慢等,这是一个大问题。不要从主线程调用它们。
您也没有获得任何进度报告,因此当下载速度很慢时,您无法告诉用户它有多远或需要多长时间。
几乎在所有情况下,您都应该使用NSURLDownload或NSURLConnection。
答案 2 :(得分:1)
最简单的方法是使用NSURLownload与NSURLRequest。
答案 3 :(得分:1)
如果要将Web服务中的数据转换为NSString或NSData,NSURLConnection是很好的。确保在NSURLConnection方法中进行异步调用并处理错误和数据
这是REST风格调用的一个很好的例子 http://kosmaczewski.net/2008/03/26/playing-with-http-libraries/
答案 4 :(得分:1)
NSURLConnection确实为您提供了最大的粒度,但请注意NSURLConnection的sendSynchronousRequest()方法。 It leaks memory each time(已经附加了XCode Leak Instrumentation工具并运行它来向我自己证明)并且偶尔会毫无理由地提供奇怪的HTTP 204响应。 I've blogged about this here
答案 5 :(得分:0)
另一种方法是使用libcurl,它预装在任何OS X系统上。如果你使用这种方法,你最好确保代理等系统设置得到尊重。