NSURLConnection 提供了兩種方式來實作連接配接,一種是同步的另一種是異步的,異步的連接配接将會建立一個新的線程,這個線程将會來負責下載下傳的動作。而對于同步連接配接,在下載下傳連接配接和處理通訊時,則會阻塞目前調用線程。
許多開發者都會認為同步的連接配接将會堵塞主線程,其實這種觀點是錯誤的。一個同步的連接配接是會阻塞調用它的線程。如果你在主線程中建立一個同步連接配接,沒錯,主線程會阻塞。但是如果你并不是從主線程開啟的一個同步的連接配接,它将會類似異步的連接配接一樣。是以這種情況并不會堵塞你的主線程。事實上,同步和異步的主要差別就是運作 runtime 為會異步連接配接建立一個線程,而同步連接配接則不會。
1、NSURL:請求位址;
2、NSURLRequest:封裝一個請求,儲存發給伺服器的全部資料,包括一個 NSURL 對象,請求方法、請求頭、請求體 ....;
3、NSMutableURLRequest:NSURLRequest 的子類
4、NSURLConnection:負責發送請求,建立用戶端和伺服器的連接配接。發送 NSURLRequest 的資料給伺服器,并收集來自伺服器的響應資料。
1、建立一個 NSURL 對象,設定請求路徑(設定請求路徑);
2、傳入 NSURL 建立一個 NSURLRequest 對象,設定請求頭和請求體(建立請求對象);
任何 NSURLRequest 預設都是 GET 請求。
3、使用 NSURLConnection 發送 NSURLRequest(發送請求)。
發送同步請求:有傳回值。
發送異步請求:沒有傳回值。
使用 NSURLConnection 的 sendSynchronousRequest:returningResponse:error: 類方法,我們可以進行同步請求。
在建立一個同步的網絡連接配接的時候我們需要明白一點,并不是是我們的這個同步連接配接一定會堵塞我們的主線程,如果這個同步的連接配接是建立在主線程上的,那麼這種情況下是會堵塞我們的主線程的,其他的情況下是不一定會堵塞我們的主線程的。例如如果在 GCD 的全局并發隊列上初始化了一個同步的連接配接,其實并不會堵塞我們的主線程的。
發送異步請求有兩種方式:
1)使用 block 回調:
2)代理:
建立網絡連接配接後可以不使用 start,系統會自動開始網絡連接配接。
取消一個請求後,連接配接不在調用代理方法,如果希望再此連接配接,需要再次建立一個新的網絡連接配接。
NSURLConnectionDownloadDelegate 代理方法是為 Newsstand Kit’s(雜志包) 建立的下載下傳服務的,Newsstand 主要在國外使用比較廣泛,國内極少。
如果使用 NSURLConnectionDownloadDelegate 代理方法監聽下載下傳進度,能夠監聽到進度,但是找不到下載下傳的檔案。
Objective-C
Swift
使用 block 回調方式
使用 協定 方式
使用 閉包 方式
使用 閉包 回調方式
QDownloaderOperation.h
QDownloaderOperation.m
QDownloaderManager.h
QDownloaderManager.m
ViewController.m