天天看點

iOS開發網絡篇—NSURLConnection基本使用(一)

一、nsurlconnection的常用類

(1)nsurl:請求位址

(2)nsurlrequest:封裝一個請求,儲存發給伺服器的全部資料,包括一個nsurl對象,請求方法、請求頭、請求體....

(3)nsmutableurlrequest:nsurlrequest的子類

(4)nsurlconnection:負責發送請求,建立用戶端和伺服器的連接配接。發送nsurlrequest的資料給伺服器,并收集來自伺服器的響應資料

補充:一個nsurlrequest對象就代表一個請求,它包含的資訊有:

    一個nsurl對象

    請求方法、請求頭、請求體

    請求逾時

    …...

二、nsurlconnection的使用

1.簡單說明

使用nsurlconnection發送請求的步驟很簡單

(1)建立一個nsurl對象,設定請求路徑(設定請求路徑)

(2)傳入nsurl建立一個nsurlrequest對象,設定請求頭和請求體(建立請求對象)

(3)使用nsurlconnection發送nsurlrequest(發送請求)

iOS開發網絡篇—NSURLConnection基本使用(一)

2.代碼示例

(1)發送請求的三個步驟:

1.設定請求路徑

2.建立請求對象

3.發送請求

3.1發送同步請求(一直在等待伺服器傳回資料,這行代碼會卡住,如果伺服器,沒有傳回資料,那麼在主線程ui會卡住不能繼續執行操作)有傳回值

3.2發送異步請求:沒有傳回值

說明:任何nsurlrequest預設都是get請求。

(2)發送同步請求代碼示例:

iOS開發網絡篇—NSURLConnection基本使用(一)
iOS開發網絡篇—NSURLConnection基本使用(一)
iOS開發網絡篇—NSURLConnection基本使用(一)
iOS開發網絡篇—NSURLConnection基本使用(一)

模拟器情況:

iOS開發網絡篇—NSURLConnection基本使用(一)

列印伺服器傳回的資訊:

iOS開發網絡篇—NSURLConnection基本使用(一)

補充說明:

1.提前的表單驗證

2.發送請求給伺服器(帶上賬号和密碼)

get請求:請求行\請求頭\請求體

注意:get請求中不存在請求體,因為所有的資訊都寫在url裡面。在ios裡面,請求行和請求頭都不用寫。

(3)發送異步請求

發送異步請求有兩種方式:

1)使用block回調

2)代理

a.使用block回調方法發送異步請求

使用block回調代碼示例:

iOS開發網絡篇—NSURLConnection基本使用(一)
iOS開發網絡篇—NSURLConnection基本使用(一)
iOS開發網絡篇—NSURLConnection基本使用(一)
iOS開發網絡篇—NSURLConnection基本使用(一)

模拟器情況(注意這裡使用了第三方架構):

iOS開發網絡篇—NSURLConnection基本使用(一)

列印檢視:

iOS開發網絡篇—NSURLConnection基本使用(一)

代碼說明:

block代碼段:當伺服器有傳回資料的時候調用會開一條新的線程去發送請求,主線程繼續往下走,當拿到伺服器的傳回資料的資料的時候再回調block,執行block代碼段。這種情況不會卡住主線程。

隊列的作用:決定這個block操作放在哪個線程執行?

重新整理ui界面的操作應該放在主線程執行,不能放在子線程,在子線程處理ui相關操作會出現一些莫名的問題。

提示:

(1)建立一個操作,放在nsoperation隊列中執行,預設是異步執行的。

(2)mainqueue 傳回一個和主線程相關的隊列,即主隊列。

新的問題:如果向伺服器發送請求,卻并沒有拿到資料,那麼程式會崩潰(data不能為空)

改進代碼:

iOS開發網絡篇—NSURLConnection基本使用(一)
iOS開發網絡篇—NSURLConnection基本使用(一)
iOS開發網絡篇—NSURLConnection基本使用(一)
iOS開發網絡篇—NSURLConnection基本使用(一)

解析data

說明:使用nsjsonserialization 傳回的對象,取決于最外層是什麼,如果是{}那就是字典,[]那就是數組等。

首先确定請求路徑,然後建立請求對象(預設發送的時get請求),使用異步方法(一調 用這個方法,它會自動開啟一個子線程去發送請求,當請求成功,資料傳回的時候自動調用内部的代碼段,這個代碼段在那個線程執行取決于隊列,如果是主隊列, 那麼在子線程發送請求成功拿到伺服器的資料後,回到主線程中解析資料,重新整理ui界面)。

b.使用代理方法發送異步請求

要監聽伺服器傳回的data,是以使用<nsurlconnectiondatadelegate>協定

常見大代理方法如下:

iOS開發網絡篇—NSURLConnection基本使用(一)
iOS開發網絡篇—NSURLConnection基本使用(一)
iOS開發網絡篇—NSURLConnection基本使用(一)
iOS開發網絡篇—NSURLConnection基本使用(一)

使用異步方法發送get請求的代碼示例:

iOS開發網絡篇—NSURLConnection基本使用(一)
iOS開發網絡篇—NSURLConnection基本使用(一)
iOS開發網絡篇—NSURLConnection基本使用(一)
iOS開發網絡篇—NSURLConnection基本使用(一)
iOS開發網絡篇—NSURLConnection基本使用(一)

補充:

(1)資料的處理

在didreceivedata:方法中,拼接接收到的所有資料,等所有資料都拿到後,在connectiondidfinishloading:方法中進行處理

(2)網絡延遲

在做網絡開發的時候,一定要考慮到網絡延遲情況的處理,可以在伺服器的代碼設定一個斷點模拟。

在伺服器代碼的登入方法中設定斷點

iOS開發網絡篇—NSURLConnection基本使用(一)

設定請求的最大延遲

iOS開發網絡篇—NSURLConnection基本使用(一)
iOS開發網絡篇—NSURLConnection基本使用(一)
iOS開發網絡篇—NSURLConnection基本使用(一)

三、nsmutableurlrequest

nsmutableurlrequest是nsurlrequest的子類,常用方法有

設定請求逾時等待時間(超過這個時間就算逾時,請求失敗)- (void)settimeoutinterval:(nstimeinterval)seconds;

設定請求方法(比如get和post)- (void)sethttpmethod:(nsstring *)method;

設定請求體- (void)sethttpbody:(nsdata *)data;

設定請求頭- (void)setvalue:(nsstring *)value forhttpheaderfield:(nsstring *)field;

繼續閱讀