你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS7引入API之NSURLSession入門介紹

IOS7引入API之NSURLSession入門介紹

編輯:IOS開發綜合

ios7引入了nsurlsession,通過它可以支持後台相關的網絡操作的新特性:

1.後台上傳下載; 2.不需要通過nsoperation,直接用nsurlsession的api就可以做到網絡操作的暫停和恢復。 3.作為可配置的容器:例如你可以設置http頭的一些屬性並且保存在session裡,不用重復去做配置 4.可以子類化並支持私有配置的session 5.對鑒權的回調做了改進,此前nsurlconnection的鑒權回調無法和請求進行匹配,該回調可能來自任意的請求;而現在每個請求都可以在指定的代理方法中對其進行處理.
nsurlsession層次結構示意圖: \

\
可以看到,它包含了配置、代理還有用來處理各種任務的task,在task裡面實現了各種不同的http請求。task的結構圖如下:

\

vcbk1tDX08Dgu6/By8nPtKvPwtTYtcTIzs7xo6yyosfS1qez1rnSxvCjr7vWuLSjr8ihz/u1xLLZ1/eju7e1u9i1xG5zZGF0YdDo0qrX1Ly6yKW0psDto6zV4rXjscjG8GFmbmV0d29ya2luZ7XEseO93bPMtsi/ydLUy7XT0Mv5srvI56Ossc++uWFmbmV0d29ya2luZ8rH1Nq4/LjftcSy47TOvfjQ0MHLt+LXsKGjPC9wPgo8cD69+NDQ0ru0zrHq17y1xM34wuey2df3ztLDx7fWzqrI58/CvLiyvaO6PC9wPgo8cD5zdGVwMTrF5NbDc2Vzc2lvbiyxyMjnxeTWw8frx/O1xGhlYWRlcqO7xeTWw8rHt/Gxo7Tmu7q05qGiY29va2lloaLWpMrptcg8L3A+CjxwPrT6wuvKvsD9yOfPwqO6PC9wPgo8cD48YnI+CjwvcD4KPHA+PC9wPgo8cCBjbGFzcz0="p1"> NSURLSessionConfiguration *config = [NSURLSessionConfiguration ephemeralSessionConfiguration];

// 2

[config setHTTPAdditionalHeaders:@{@"Authorization":[Dropbox apiAuthorizationHeader]}];

// 3

_session = [NSURLSession sessionWithConfiguration:config];


step2:

使用生成的session調用任務方法,保存方法返回的task;對該task執行resume操作(默認生成的task是處於掛起狀態)。

此處的任務方法有兩種類型,一種是taskwithurl,一種是taskwithrequest,簡單來說只針對url請求就可以調用withurl方法,如果需要在請求中帶上更多內容進行一些配置的話需要采用taskwithrequest相關的方法。

代碼示例如下:

NSURL*url = [Dropbox appRootURL];

// 2

NSURLSessionDataTask *dataTask =

[self.session dataTaskWithURL:url

completionHandler:^(NSData*data,

NSURLResponse *response,

NSError *error){

if (!error){

// TODO 1: More coming here!

}

}];

// 3

[dataTask resume];


step3:

在上一步請求中的block實現結果解析(nsdata需要根據接口具體情況(一般是服務器側決定的)解析成可以理解的數據,如json/xml/plist等);也可以不在block中進行相關操作,而是實現相關的代理方法(需要在step1中先設置session的代理),對相關的結果/進度等進行處理。

urlsession相關的代理方法有很多,這裡不一一列舉,主要有以下幾組協議:

@protocol NSURLSessionDelegate // session的代理,相當於所有協議的父類


@protocol NSURLSessionTaskDelegate // task的代理,其父協議是NSURLSessionDelegate


@protocol NSURLSessionDataDelegate // datatask的代理,其父協議是NSURLSessionTaskDelegate


@protocol NSURLSessionDownloadDelegate // downloadtask的代理,其父協議是NSURLSessionDataDelegate


結合其對應類的層次關系,相關的幾組協議的關系也就不難理解了。




  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved