码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开发-NSURLConnection和NSURLSession的简单实用

时间:2015-11-01 20:55:10      阅读:360      评论:0      收藏:0      [点我收藏+]

标签:

一,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的简单实用

标签:

原文地址:http://www.cnblogs.com/joey-qi/p/4928484.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!