国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

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

2019-11-14 20:46:12
字體:
供稿:網(wǎng)友

在iOS7中,蘋果介紹了新的API —— NSURLsession,這一系列的API是用來替代NSURLConnection的。

 
NSURLSession帶來了這些新的好處:
  • 后臺(tái)上傳和下載
  • 可以暫停和繼續(xù)連接網(wǎng)絡(luò)
  • 保存配置
  • 子類化和私有存儲(chǔ)
  • 改良的認(rèn)證處理
  • 豐富的代理模型
  • 通過文件系統(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è)類與其它兩個(gè)類有點(diǎn)不一樣,這個(gè)類下載到的東西是直接寫在一個(gè)臨時(shí)文件中的,下載好之后它會(huì)給你一個(gè)臨時(shí)文件的指針,然后自己手動(dòng)保存。
 
好,我們直接來著手開始實(shí)踐,下面我們來請(qǐng)求一個(gè)比特幣行情的API來獲取他們的數(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     //310     NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {11         if (!error) {12             //413             NSHTTPURLResponse *httPResponse = (NSHTTPURLResponse *)response;14             //515             if (httpResponse.statusCode == 200) {16                 //617                 NSString *string = [[NSString alloc] initWithData:data encoding:NSStringEncodingConversionAllowLossy];18                 NSLog(@"%@",string);19             }20         }21     }];22     //723     [dataTask resume];24     25     return self;26 }

1、將URL打包成request

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

由于storyboard會(huì)自己調(diào)用initWithCoder:這個(gè)方法,所以我們直接把代碼寫在這個(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)然,上面代碼為了省事,沒用NSURLSessionConfiguration,其實(shí)可以把
NSURLSession *session = [NSURLSession sharedSession];

 

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

 

NSURLSessionConfiguration就是這樣用的,當(dāng)然,這個(gè)小程序暫時(shí)還用不著設(shè)置其他配置。
 
不過很有必要介紹一下NSURLSessionConfiguration的三個(gè)基本配置:
 
 

 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 三明市| 高安市| 永仁县| 惠州市| 九寨沟县| 蒙城县| 平定县| 金川县| 隆子县| 习水县| 通许县| 云梦县| 福清市| 永靖县| 墨脱县| 司法| 隆林| 谷城县| 贵溪市| 五原县| 英德市| 垣曲县| 德保县| 饶河县| 海口市| 红原县| 革吉县| 华宁县| 江口县| 名山县| 襄城县| 乐安县| 芮城县| 庄浪县| 彭水| 蒙城县| 通渭县| 长兴县| 南和县| 平和县| 武宣县|