中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

學(xué)習(xí)使用NSURLSession

2018-07-20    來(lái)源:編程學(xué)習(xí)網(wǎng)

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

在iOS7中,蘋(píng)果介紹了新的API —— NSURLSession,這一系列的API是用來(lái)替代NSURLConnection的。

 
NSURLSession帶來(lái)了這些新的好處:
  • 后臺(tái)上傳和下載
  • 可以暫停和繼續(xù)連接網(wǎng)絡(luò)
  • 保存配置
  • 子類(lèi)化和私有存儲(chǔ)
  • 改良的認(rèn)證處理
  • 豐富的代理模型
  • 通過(guò)文件系統(tǒng)上傳和下載
作為一個(gè)iOS初學(xué)者的我,就不理NSURLConnection了,直接上NSURLSession
 
 
NSURLSession的架構(gòu)也很簡(jiǎn)單,NSURLSession本身就是一個(gè)統(tǒng)領(lǐng),然后帶著一個(gè)右將軍NSURLSessionConfiguration,他是負(fù)責(zé)NSURLSession的各種配置的,然后還有一個(gè)左將軍,他負(fù)責(zé)代理,也就是隨時(shí)跟進(jìn)老大的狀態(tài),然后到某個(gè)狀態(tài)點(diǎn)的時(shí)候進(jìn)行響應(yīng)。最后就是一堆NSURLSessionTask小兵,他們負(fù)責(zé)完成實(shí)際的任務(wù)。
 
 
而NSURLSessionTask小兵其實(shí)也是個(gè)泛指,它實(shí)際上有分幾個(gè)兵種:
  • NSURLSessionDataTask:普通的數(shù)據(jù)傳輸,拿到的數(shù)據(jù)是NSData格式,你可以根據(jù)數(shù)據(jù)原本的格式進(jìn)行相應(yīng)的轉(zhuǎn)換。
  • NSURLSessionUploadTask:用于上傳到網(wǎng)上的
  • NSURLSessionDownloadTask:用于下載,這個(gè)類(lèi)與其它兩個(gè)類(lèi)有點(diǎn)不一樣,這個(gè)類(lèi)下載到的東西是直接寫(xiě)在一個(gè)臨時(shí)文件中的,下載好之后它會(huì)給你一個(gè)臨時(shí)文件的指針,然后自己手動(dòng)保存。
 
好,我們直接來(lái)著手開(kāi)始實(shí)踐,下面我們來(lái)請(qǐng)求一個(gè)比特幣行情的API來(lái)獲取他們的數(shù)據(jù)。
新建一個(gè)項(xiàng)目,選擇Single View Application,然后在ViewController.m里添加以下代碼:
 

 1 - (id)initWithCoder:(NSCoder *)aDecoder  2 {  3 self = [super initWithCoder:aDecoder];  4 NSLog(@"hello initWithCoder");  5 //1  6 NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://www.okcoin.com/api/ticker.do"]];  7 //2  8 NSURLSession *session = [NSURLSession sharedSession];  9 //3 10 NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 11 if (!error) { 12 //4 13 NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; 14 //5 15 if (httpResponse.statusCode == 200) { 16 //6 17 NSString *string = [[NSString alloc] initWithData:data encoding:NSStringEncodingConversionAllowLossy]; 18 NSLog(@"%@",string); 19  } 20  } 21  }]; 22 //7 23  [dataTask resume]; 24 25 return self; 26 }

1、將URL打包成request

2、創(chuàng)建session,調(diào)用sharedSession表示使用默認(rèn)配置來(lái)創(chuàng)建session
3、小兵出馬,小兵NSURLSessionDataTask是直接從session里創(chuàng)建出來(lái)的,等于session調(diào)用dataTaskWithRequest方法來(lái)完成這個(gè)網(wǎng)絡(luò)任務(wù)。傳入request,再寫(xiě)一個(gè)block好讓數(shù)據(jù)下載好的時(shí)候可以直接處理數(shù)據(jù)。block里面有三個(gè)參數(shù),data就是你要獲取的數(shù)據(jù),response返回一些網(wǎng)絡(luò)響應(yīng)的信息,error可以處理錯(cuò)誤。
4、將response的類(lèi)型轉(zhuǎn)換為NSHTTPURLResponse,才能拿到status code
5、當(dāng)statusCode等于200時(shí),表示網(wǎng)絡(luò)沒(méi)問(wèn)題
6、處理一下數(shù)據(jù),把它打印到終端
7、當(dāng)然,最重要的是,完成以上步驟時(shí),不要忘記調(diào)用這個(gè)resume來(lái)開(kāi)始下載。

由于storyboard會(huì)自己調(diào)用initWithCoder:這個(gè)方法,所以我們直接把代碼寫(xiě)在這個(gè)方法里。
運(yùn)行程序,就可以看到終端上顯示
 
2014-01-01 11:45:55.256 LearnNSURLSession[829:541b] {"ticker":{"buy":"4376.99","high":"4388.02","last":"4376.99","low":"4246.0","sell":"4377.0","vol":"3874.2808"}}
 
OK,返回的是正確的數(shù)據(jù)。
 
當(dāng)然,上面代碼為了省事,沒(méi)用NSURLSessionConfiguration,其實(shí)可以把
NSURLSession *session = [NSURLSession sharedSession];

 

這一行代碼換成    
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];

 

NSURLSessionConfiguration就是這樣用的,當(dāng)然,這個(gè)小程序暫時(shí)還用不著設(shè)置其他配置。
 
不過(guò)很有必要介紹一下NSURLSessionConfiguration的三個(gè)基本配置:
  • backgroundSessionConfiguration: —— 這個(gè)可以讓你在后臺(tái)進(jìn)行下載,還有使用網(wǎng)絡(luò)推送通知。
  • defaultSessionConfiguration  —— 這個(gè)是默認(rèn)的配置,默認(rèn)使用cache,cookie和credential等。
  • ephemeralSessionConfiguration —— 不使用cache,cookie和credential等。
 

標(biāo)簽: 代碼 網(wǎng)絡(luò)

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:PHP新手告訴你應(yīng)該如何學(xué)習(xí)編程

下一篇:JAVA中的糕富帥技術(shù)——反射(一)