从cocoa应用程序访问Web服务器

时间:2008-12-26 14:05:37

标签: cocoa macos osx-leopard

我正在编写一个cocoa应用程序,我想从Web服务器下载文件。这样做最方便的方法是什么?我应该进入NSSockets还是NSUrlRequest?或者还有其他更简单的方法来实现这一目标吗?

6 个答案:

答案 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系统上。如果你使用这种方法,你最好确保代理等系统设置得到尊重。