IOS5中不再提供NSURLConnection方法

时间:2011-10-18 06:52:52

标签: nsurlconnection ios5

我正在查看NSURLConnection类,该类可用于建立与URL的同步或异步连接,然后检索其数据...... IOS 5对此类进行了大量更改,我已经看到他们介绍了一些与身份验证或下载相关的正式协议,但是我没有看到,例如,connection:didReceiveResponse:消息(先前发送给代理并且它不再可用)是仍然可以在某些协议中使用..一旦收到响应,如何实现异步连接并检索HTTP标头?我确信有一种方法比使用NSURLConnectionconnection:didReceiveResponse:消息更好。像stringWithContentsOfURL这样的方法总是同步加载内容吗?您在应用程序中使用什么来实现异步下载,避免使用已弃用的方法并对_http响应receive_m等事件做出反应?如果可能,您是否在后台任务中启动同步下载?

4 个答案:

答案 0 :(得分:68)

NSURLConnectionDelegate已成为正式协议(在以前的版本中它是非正式协议)。在此协议中,声明了以下(非弃用)方法:

  • connection:didFailWithError:
  • connectionShouldUseCredentialStorage:
  • connection:willSendRequestForAuthenticationChallenge:

此外,有两个符合NSURLConnectionDelegate的子协议:

NSURLConnectionDataDelegate用于将数据加载到内存的委托,并声明以下方法,其中一些我相信你会发现它们很熟悉:

  • connection:willSendRequest:redirectResponse:
  • connection:didReceiveResponse:
  • connection:didReceiveData:
  • connection:needNewBodyStream:
  • connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:
  • connection:willCacheResponse:
  • connectionDidFinishLoading:

NSURLConnectionDownloadDelegate用于将数据直接存储到磁盘文件的委托,并声明以下方法:

  • connection:didWriteData:totalBytesWritten:expectedTotalBytes:
  • connectionDidResumeDownloading:totalBytesWritten:expectedTotalBytes:
  • connectionDidFinishDownloading:destinationURL:

正如您所看到的,您仍然可以使用以前的代表,可能会进行一些小的修改。

有关详细信息,请参阅本地Xcode安装中的iOS 4.3 to iOS 5.0 API Differences document和NSURLConnection.h。发布新的SDK版本时,头文件中的文档比开发人员库中提供的文档更可靠,这并不罕见。后者需要一段时间才能保持最新状态。

答案 1 :(得分:2)

我刚遇到同样的问题。看起来使用块和NSOperationQueue来简化发送异步请求。

+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler

这意味着该委托现在仅用于身份验证和失败问题。

答案 2 :(得分:2)

NO! 如果仔细查看Apple的库,它们不仅限于用于身份验证和故障问题。

自从将+(void)sendAsynchronousRequest:queue:completionHandler:引入NSConnection类对象以来,许多可以执行与以前一样多的NSConnectionDelegate方法的事情现在可以用在名为“NSConnectionDataDelegate”的正式协议中。 NSConnectionDownloadDelegate,打开一个新房间,为NSURLConnection方法添加更多功能。 (来自iOS5)

所以我认为这是一种改进,不限制它们的使用。

答案 3 :(得分:-1)