異步下載支持應用程序在後臺下載數據,在等待下載完成的過程當中不會阻塞代碼的運行,異步鏈接模型圖以下: 服務器
對比上篇的同步下載會發現,異步下載發起請求後不會等待接收完成數據,從圖中能夠看到,異步下載也有三個步驟: 異步
一、客戶端向服務器發起請求、服務器端接收請求並解析http參數. 函數
二、應用程序在後臺下載數據,在這個過程當中不會阻塞客戶端運行(能夠認爲,打開一個下載工具,就不用管了,下載失敗或下載完成,會有回調) 工具
三、數據接收完成,如NSURLConnection的異步下載 spa
NSURLConnection同步和異步惟一的不一樣就是NSURLConnection對象的建立方式、在initWithRequest: degate指定其代理方法時就開始下載,其代理方法能獲取整個下載過程,經常使用的代理方法有: 代理
一、接收完HTTP協議頭,開始真正接手數據時候調用,通常在這個方法裏初始化一些存儲數據的對象如NSMutableData; 對象
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 內存
二、每接收一段數據就會調用此函數,通常在這把data加到NSMutableData對象上 同步
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data it
三、接收數據失敗時調用,而且中斷下載
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
四、最後,若是鏈接成功並下載,會調用,通常在這釋放一些alloc建立的內存
- (void)connectionDidFinishLoading:(NSURLConnection *)connection;