NSURLConnectionDataDelegate函数的顺序

时间:2013-07-10 07:08:21

标签: ios objective-c nsurlconnection

在NSURLConnectionDataDelegate中,有一些函数对确保一切正常非常重要,但我不确定会发生什么。

功能......

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
- (void)connectionDidFinishLoading:(NSURLConnection *)connection;

和其他几个人。

他们总是按照我提出的顺序发生吗?即,你得到的第一件事是回应,还是在连接的生命中任何时候都能发生?

2 个答案:

答案 0 :(得分:3)

-connection:didReceiveResponse:将被调用0次或更多次。如果出现错误,则会调用-connection:didFailWithError:。如果您正在获取多部分mime消息,则可以多次调用此方法,并且一旦有足够的日期创建响应对象并且在调用-connection:didReceiveData:之前调用此方法。

-connection:didReceiveData:将被调用0次或更多次。如果有超过0字节的主体,则在调用-connection:didFinishLoading:之前至少调用一次此方法。永远不会在-connection:didReceiveResponse:之前或-connection:didFinishLoading:-connection:didFailWithError:之后调用此方法。

-connection:didFinishLoading:只被调用一次,这是最后一次调用。在此方法返回后的某个时间,将释放连接。如果调用-connection:didFailWithError:并且始终是最后调用的东西,则不会调用此方法。

调用这些方法的时间以及头文件中存在哪种顺序的文档,但我还没有看到它在实际文档中简明扼要地写出来。

答案 1 :(得分:2)

对于委托方法,无论您将它们放在哪个订单顺序中。它们将在特定事件得到满足时发生。

第二件事,根据文件NSURLConnectionDataDelegate Protocol Reference

didReceiveResponse :当服务器确定其有足够的信息来创建NSURLResponse时,将调用此方法。它可以被多次调用,例如在重定向的情况下,因此每次我们重置数据。

didReceiveData :当连接中有新的可用数据时,将调用此方法。这种方法称为多次

connectionDidFinishLoading :连接成功加载后发送。在重定向的情况下,此方法也称为多次。