didReceiveResponse是否保证在connectionDidFinishLoading之前?

时间:2011-09-09 10:49:15

标签: iphone ios nsurlconnection

后台:在握手过程中,我的iOS应用通过

了解服务器功能
  1. didReceiveResponse

    中检查其标题信息

  2. connectionDidFinishLoading
  3. 中解析其响应XML

    问题陈述:由于回调#1在#2之前,我将版本字符串存储在didReceiveResponse中,并在响应可用时稍后在connectionDidFinishLoading中进行检查。< / p>

    幸运的是,到目前为止工作正常,因为#1优先于#2。但这个订单总是由网络/ iOS保证吗?

3 个答案:

答案 0 :(得分:3)

来自NSURLCOnnection Reference

Zero or more connection:didReceiveResponse: messages will be sent
     在接收连接之前

到委托:didReceiveData:message。   连接的唯一情况:didReceiveResponse:未发送到   委托是协议实现遇到错误的时候   在创建响应之前。

Zero or more connection:didReceiveData: messages will be sent
     

在将以下任何消息发送给委托之前:   connection:willCacheResponse:,connectionDidFinishLoading:,   连接:didFailWithError:

Zero or one connection:willCacheResponse: messages will be sent to
     

连接后的委托:didReceiveData:发送但在a之前   connectionDidFinishLoading:发送消息。

因此,只有在创建响应之前出现错误才会发生。

答案 1 :(得分:2)

根据文件:

  

零或多个连接:didReceiveResponse:消息将在接收连接之前发送给委托:didReceiveData:message。连接:didReceiveResponse:未发送给委托的唯一情况是协议实现在创建响应之前遇到错误。   零或更多连接:didReceiveData:消息将在以下任何消息发送到委托之前发送:connection:willCacheResponse:,connectionDidFinishLoading :, connection:didFailWithError:。

因此,除非出现错误,否则您可以保证在获得connectionDidFinishLoading之前获得didReceiveResponse。

答案 2 :(得分:0)

是的,当然。在didReceiveResponse中,您可以检查NSURLResponse,如果某些内容不正确,您可以停止下载。因此,只有在您检查了响应后才会调用connectionDidFinishLoading