天天看點

iOS - NSURLConnection 網絡請求前言1、NSURLConnection2、NSURLConnection 同步 GET 請求3、NSURLConnection 同步 POST 請求4、NSURLConnection 異步 GET 請求5、NSURLConnection 異步 POST 請求6、NSURLConnection 檔案下載下傳7、NSURLConnection 下載下傳單例封裝

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

繼續閱讀