2013-07-10 35 views
0

在NSURLConnectionDataDelegate中有几个函数对于确保一切正常工作非常重要,但我不知道在什么时候会发生什么。NSURLConnectionDataDelegate函数的顺序

功能...

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

和其他几个。

他们总是按我放的顺序发生吗?也就是说,这种回应是你在连接生命中的第一件事,或者它可能发生在任何时候?

回答

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:并且始终是最后一次调用,则不调用此方法。

有关何时调用这些方法以及在头文件中存在哪些序列的文档,但我没有看到它在实际文档中写得非常简洁。

+0

太棒了!我会看看头文件。完美的答案,谢谢。 – Fogmeister

+0

@Jason Coco:在“-connection:didFailwithError:”之前调用了“-connection:didReceiveResponse:”? –

2

对于委托方法,无论您按照哪种顺序排列它们。当特定事件得到满足时会发生。

第二件事情,按照该NSURLConnectionDataDelegate Protocol Reference文件:

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

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

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