使用NSURLSession

来源:互联网 发布:老鼠 知乎 编辑:程序博客网 时间:2024/06/06 02:39

公司准备安排一场面向内部员工的移动开发培训,包括Android和iOS,我就担当起了写培训教材和制作PPT的重任,于是乎,在我写完App新功能的接口,在iOS端完成了测试,全程陪跑安卓测试成功之后,就全身心的投入了PPT的制作中。

在写PPT的过程中,搜集资料,发现NSURLConnection在iOS9的时候被弃用,而作为一个接触iOS比较早的我(哈哈哈,比较早而已),是习惯了用NSURLConnection的,虽然本质上用AFNetworking比较多。但是既然是培训,还是要给那些想学iOS的同事解释一下NSURLConnection和NSURLSession,于是乎,在网上找了一下相关资料进行学习和整理,将它们毫无保留的分享给同事们,也要分享给大家。

努力的人运气都不会太差。


言归正传,跟我一起学NSURLSession

使用NSURLSession,总共分两步:

  • 第一步 通过NSURLSession的实例创建task
  • 第二部 执行task

既然两步里面都出现了task,就先说说它吧.
NSURLSessionTask可以简单理解为任务:如数据请求任务,下载任务,上传任务and so on.我们使用的是他的子类们:

  • NSURLSessionTask(抽象类)
    • NSURLSessionDataTask
      • NSURLSessionUploadTask
    • NSURLSessionDownloadTask

NSURLSessionDataTask

字面上看是和数据相关的任务,但其实dataTask完全可以胜任downloadTask和uploadTask的工作.这可能也是我们使用最多的task种类。

简单GET请求

如果请求的数据比较简单,也不需要对返回的数据做一些复杂的操作,那么我们可以使用带block。

#pragma mark - NSURLSession GET Block-- (void)getDataByMethodGetUseBlock{    //单例获得NSURLSession对象    NSURLSession *session = [NSURLSession sharedSession];    //创建一个url对象    NSURL *url = [[NSURL alloc]initWithString:GET_URL];    //通过URL初始化task,在block内部可以直接对返回的数据进行处理    NSURLSessionTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {        if (data != nil) {            //解析数据            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];            NSLog(@"%@",dic);        }    }];    //启动任务    [task resume];    }

Tips:
所有类型的task都要调用resume方法才会开始进行请求。


简单POST请求
POST和GET的区别就在于request,所以使用session的POST请求和GET过程是一样的,区别就在于对request的处理。

#pragma mark - NSURLSession POST Block-- (void)getDataByMethodPostUseBlock{    NSMutableURLRequest  *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:POST_URL]];    request.HTTPMethod = @"POST";    request.HTTPBody = [POST_BODY dataUsingEncoding:NSUTF8StringEncoding];        //单例获得NSURLSession对象    NSURLSession *session = [NSURLSession sharedSession];    //通过URL初始化task,在block内部可以直接对返回的数据进行处理   NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {       if (data != nil) {           //解析数据           NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];           NSLog(@"%@",dic);       }   }];    //启动任务    [task resume];    }

未完待续···


0 0
原创粉丝点击