从cocoa应用程序访问Web服务器
我正在编写一个cocoa应用程序,希望从Web服务器下载一个文件。做这件事最方便的方法是什么?我应该使用NSSockets还是NSURL请求?或者有其他更简单的方法来实现这一点吗?最简单的方法可能是将NSURLDownload与NSURLRequest一起使用 如果要将文件内容加载到内存中,许多Cocoa数据类(如NSString、NSData甚至NSDictionary)都有从cocoa应用程序访问Web服务器,cocoa,macos,osx-leopard,Cocoa,Macos,Osx Leopard,我正在编写一个cocoa应用程序,希望从Web服务器下载一个文件。做这件事最方便的方法是什么?我应该使用NSSockets还是NSURL请求?或者有其他更简单的方法来实现这一点吗?最简单的方法可能是将NSURLDownload与NSURLRequest一起使用 如果要将文件内容加载到内存中,许多Cocoa数据类(如NSString、NSData甚至NSDictionary)都有initWithURL:方法,这些方法直接使用web请求的内容进行初始化。它们很容易使用,但它们不是很灵活,也不能提供良
initWithURL:
方法,这些方法直接使用web请求的内容进行初始化。它们很容易使用,但它们不是很灵活,也不能提供良好的错误处理。如果需要,NSURLConnection提供了一种更灵活的加载数据的方法
如果您想将文件直接下载到磁盘,那么NSURLDownload将是最好的选择。警告一句:initWithURL:方法被阻塞,如果文件太大、服务器太慢、用户的internet连接太慢等等,这是一个大问题。不要从主线程调用它们 您也不会收到任何进度报告,因此当下载速度较慢时,您无法告诉用户下载进度有多远或需要多长时间
在几乎所有情况下,您都应该使用NSURLDownload或NSURLConnection。另一种方法是使用libcurl,它预装在任何OS X系统上。如果您使用这种方法,最好确保系统设置(如代理等)得到尊重。如果您希望将数据从web服务获取到NSString或NSData中,NSURLConnection是好的。确保在NSURLConnection方法中进行异步调用并处理错误和数据 下面是一个REST风格调用的好例子
NSURLConnection确实为您提供了最大的粒度,但请小心使用NSURLConnection的sendSynchronousRequest()方法。(我已经连接了XCode泄漏检测工具,并运行它来向我自己证明这一点),偶尔会无缘无故地给出奇怪的HTTP 204响应