一個初學者對NSURLSession的使用心得

自從ios7之后,蘋果推薦使用NSURLSession,棄用NSURLConnection。作為一個初學者,當然是奔著最新的技術(shù)去學習,下面就講一下一個初學者對NSURLSession的使用心得。有什么不對的地方,請各路大神指出更正,勿噴,勿噴。

那么,現(xiàn)在就讓我開始吧?。?!

NSURLSession有三種功能:加載數(shù)據(jù),上傳,下載。

今天就講一講NSURLSession怎么加載數(shù)據(jù),并且將加載的json數(shù)據(jù),解析。

閑話少說,現(xiàn)貼出來代碼

+(void)getData:(NewsTableView *)table block_id:(NSString*)block_id position:(NSString*)cellPosition num:(NSString*)num{
      //如果需要參數(shù),直接用轉(zhuǎn)義字符加就好了
      NSString *sURL = [NSString stringWithFormat:@"這里寫你的URL"];

      NSURL* url = [NSURL URLWithString:sURL];

      NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
      
      [request setHTTPMethod:@"GET"];//在這里更改GET,POST請求

      [request setTimeoutInterval:120.0];//設置超時時長

      NSURLSessionConfiguration* config = [NSURLSessionConfiguration defaultSessionConfiguration];

      NSURLSession* session = [NSURLSession sessionWithConfiguration:config];

      NSURLSessionTask* task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

      if (error == nil) {
            //數(shù)據(jù)獲取成功,在這里進行對獲取到的數(shù)據(jù)data進行處理
            NSArray* jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];


            for (NSString* str in jsonArray) {

                  //再次解析

                  NSData* da = [str dataUsingEncoding:NSUTF8StringEncoding];

                  NSDictionary* dict = [NSJSONSerialization JSONObjectWithData:da options:NSJSONReadingMutableContainers error:&error];

                  NewsInfo* news = [NewsInfo initFromDict:dict];

                  [table.newsArray addObject:news];

            }

      }else{

            NSLog(@" %@",error);

      }

      //由于獲取數(shù)據(jù)內(nèi)容會在ui界面初始化后執(zhí)行,所以需要重新加載tableview的數(shù)據(jù)
      dispatch_async(dispatch_get_main_queue(), ^{

            [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

            [table.tableView reloadData];

            });

      }];

      [task resume];//恢復任務,切記不能忘

}

通過NSURLSession獲取數(shù)據(jù)的基本套路就是

  • 先要給出一個URL地址
  • 通過這個地址構(gòu)建以個request請求
  • 給出NSURLSession的配置config
  • 通過config初始化一個Session
  • 通過Session和request 初始化 task請求
NSURLSessionConfiguration* config = [NSURLSessionConfiguration defaultSessionConfiguration];
  • defaultSessionConfiguration: 默認配置,使用硬盤來存儲緩存數(shù)據(jù)。
  • backgroundSessionConfiguration: 后臺session配置,與默認配置類似,不同的是會在后臺開啟另一個線程來處理網(wǎng)絡數(shù)據(jù)。
  • ephemeralSessionConfiguration: 臨時session配置,與默認配置相比,這個配置不會將緩存、cookie等存在本地,只會存在內(nèi)存里,所以當程序退出時,所有的數(shù)據(jù)都會消失。

NSJSONSerialization

NSJSONSerialization 蘋果自帶的json解析。
主要通過這個方法來獲取解析

[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
  • NSJSONReadingMutableContainers 返回可變?nèi)萜?/li>
  • NSJSONReadingMutableLeaves:返回的JSON對象中字符串的值為NSMutableString
  • NSJSONReadingAllowFragments:允許JSON字符串最外層既不是NSArray也不是NSDictionary,但必須是有效的JSON Fragment。

一般情況下,我們返回的都是數(shù)組或者字典。
返回的如果是‘[’ ‘]’ 一般是解析成數(shù)組
返回 的如果是‘{’ ‘}’ 一般是解析成字典

使用NSJSONSerialization的過程中,如果遇到直接輸出解析出來的字典,發(fā)現(xiàn)中文是亂碼這種情況,不必慌張,直接按鍵取值就不會是亂碼了,想當初,小弟我為了轉(zhuǎn)碼花費了不少時間....

以上,基本就是我對NSURLSession的使用心得,希望對初學者有所幫助,大家一起努力吧...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • NSURLSession基本使用 簡介 使用步驟使用NSURLSession會話對象創(chuàng)建Task,然后執(zhí)行Task...
    彼岸的黑色曼陀羅閱讀 1,118評論 0 3
  • iOS開發(fā)系列--網(wǎng)絡開發(fā) 概覽 大部分應用程序都或多或少會牽扯到網(wǎng)絡開發(fā),例如說新浪微博、微信等,這些應用本身可...
    lichengjin閱讀 4,043評論 2 7
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,591評論 19 139
  • 218.241.181.202 wxhl60 123456 192.168.10.253 wxhl66 wxhl6...
    CYC666閱讀 1,553評論 0 6
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 15,410評論 4 61

友情鏈接更多精彩內(nèi)容