iOS開發-NSURLConnection和NSURLSession的簡單實用

來源:互聯網
上載者:User

標籤:

一,NSURLConnection的簡單實用

  (一).簡單請求過程

   /// 1.建立url(資源路徑)    NSURL *url = [NSURL URLWithString:@"http://f.hiphotos.baidu.com/image/pic/item/d6ca7bcb0a46f21ff3649fbaf5246b600d33ae83.jpg"];        /// 2.建立請求    NSURLRequest *request = [NSURLRequest requestWithURL:url];        /// 3.發送請求    // 3.1同步請求    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];    /* data 處理 */        // 3.2非同步請求    // 非同步請求需要請求操作放到一個操作隊列(queue)中    NSOperationQueue *queue = [[NSOperationQueue alloc] init];        [NSURLConnection sendAsynchronousRequest:request                                       queue:queue                           completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
/* response,data,connectionError 處理 */

}];

代碼說明

 1.可以通過以下代碼擷取主隊列(對應的請求在主線程,即使NSURLConnection發非同步請求也是如此)。  

    NSOperationQueue *queue = [NSOperationQueue mainQueue];// 擷取主隊列

   2.(3.1,3.2)的兩個方法現在被蘋果廢棄了,取而代之的是NSURLSession的方法,NSURLSession可以說是NSURLConnection的替代品。

 

  (二).資料解析(json/xml)

    json解析(NSJSONSerialization)

   // You use the NSJSONSerialization class to convert JSON to Foundation objects    // and convert Foundation objects to JSON.(API)    // 簡言之,我們用 NSJSONSerialization 這個類 可進行json與oc對象之間的轉換,方法如下:        // 1.json 序列化成 oc對象    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];        // 2.oc對象 轉 json (不常用)    [NSJSONSerialization dataWithJSONObject:object options:NSJSONWritingPrettyPrinted error:nil];

代碼說明

 1.通過網路請求獲得的data(json資料)是二進位的資料流,我們需要將其轉換成oc對象來進行操作。

 

    xml解析(NSXMLParser)

  <?xml version="1.0" encoding="UTF-8"?>    // 檔案聲明(UTF-8編碼)    <students>                              // students、student、name、age都表示:元素(或節點)        <student>                           //            <name>ben</name>                // ben、m、10表示:元素屬性            <sex>m</sex>            <age>10</age>        </student>        <student>            <name>amy</name>            <sex>f</sex>            <age>9</age>        </student>    </students>

代碼說明

 1.這是一個簡單的xml代碼,包含了xml的三個基本組成部分(聲明、節點、屬性)

 

{  
   // 1.建立xml解析器(data是需要解析的資料) NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:data]; // 2.設定代理 xmlParser.delegate = self; // 3.啟動解析 [xmlParser parse];

  // 4.解析完成,重新整理UI
   /* 重新整理UI */;
  // 取消解析(實現parser:parseErrorOccurred:方法)

// [xmlParser abortParsing];  
}
#pragma mark - NSXMLParser delegate/// Sent by the parser object to the delegate when it begins parsing a document./// 開始解析時調用- (void)parserDidStartDocument:(NSXMLParser *)parser{ NSLog(@"解析開始!");}/// 開始解析元素(節點)市調用- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
                        namespaceURI:(NSString *)namespaceURI
                        qualifiedName:(NSString *)qName
                         attributes:(NSDictionary<NSString *,NSString *> *)attributeDict{ // 解析需要的元素 if ([elementName isEqualToString:@"student"]) { // attributeDict:contains any attributes associated with the element. // Keys are the names of attributes, and values are attribute values // 提取元素的屬性 NSDictionary *dict = attributeDict; /* 在此進行資料字典dict的其他動作 */ } NSLog(@"");}/// completed parsing 時調用- (void)parserDidEndDocument:(NSXMLParser *)parser{ NSLog(@"解析完成!");}/// 出現error的時候調用- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{ NSLog(@"解析錯誤!");}

  

  (三).POST和GET

  // url    NSURL *url = [[NSURL alloc] initWithString:@"http://f.hiphotos.baidu.com/****"];        // request        // NSURLRequest建立的請求是get請求.    // NSMutableURLRequest建立的請求預設也是get請求,    // 需要調用HTTPMethod才能修改請求方式        NSURLRequest *request_get = [NSURLRequest requestWithURL:url];        // 1.建立request    NSMutableURLRequest *request_post = [NSMutableURLRequest requestWithURL:url];    // 2.佈建要求方法為 post    request_post.HTTPMethod = @"POST";    // 3.佈建要求體    // HTTPBody是NSData類型,param string需要轉碼    NSString *bodyParam = [NSString stringWithFormat:@"tel=%@&pwd=%@", tel, pwd];    request_post.HTTPBody = [bodyParam dataUsingEncoding:bodyParam];        /* 發送請求 */

代碼說明

 1.需要建立post請求需用到NSMutableURLRequest這個類並且需要設定其HTTPMethod為@"POST"。

 

二,NSURLSession的簡單實用

  // **** NSURLSession與NSURLConnection比較

    // * NSURLSession 執行個體是個單例

    // * NSURLSession 發送請求可直接用URL,不需要額外建立request

    // * NSURLSession 需要建立任務(task)

    // * NSURLSession 發送請求需要開啟任務

  /***** 普通請求 *****/    // 建立session    NSURLSession *session =[NSURLSession sharedSession];        // 通過NSURL建立任務(task)    NSURLSessionDataTask *task =[session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {                /*  data、response、error處理 */            }];        // 通過NSURLRequest建立任務(task    /*     NSURLSessionDataTask *task = [session dataTaskWithRequest:request_get completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {            }];    */        // 任務開啟    [task resume];        // 任務暫停    [task suspend];
    /***** 下載檔案 請求 *****/    // 建立session    NSURLSession *session =[NSURLSession sharedSession];        // 用NSURL建立任務(task)    NSURLSessionDownloadTask *task =[session downloadTaskWithURL:url completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {                /*  data、response、error處理 */    }];        // 任務開啟    [task resume];        // 任務暫停    [task suspend];

 

 

結語:

  今天稍微介紹下NSURLConnection和NSURLSession的使用,對於網路請求這隻是剛剛開始,後續將會介紹NSURLConnection和NSURLConnection的代理方法的使用,並會附帶一些demo。

 

iOS開發-NSURLConnection和NSURLSession的簡單實用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.