2013-07-10 99 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:連接加載成功後發送。這種方法在重定向的情況下也稱爲多次。