后台:在握手过程中,我的iOS应用通过
了解服务器功能在didReceiveResponse
和
connectionDidFinishLoading
问题陈述:由于回调#1在#2之前,我将版本字符串存储在didReceiveResponse
中,并在响应可用时稍后在connectionDidFinishLoading
中进行检查。< / p>
幸运的是,到目前为止工作正常,因为#1优先于#2。但这个订单总是由网络/ iOS保证吗?
答案 0 :(得分:3)
在接收连接之前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
。