博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NSURLSession的简单使用
阅读量:4973 次
发布时间:2019-06-12

本文共 2983 字,大约阅读时间需要 9 分钟。

在iOS7中,苹果介绍了新的API —— NSURLSession,这一系列的API是用来替代NSURLConnection的。

 NSURLSession带来了这些新的好处:
  • 后台上传和下载
  • 可以暂停和继续连接网络
  • 保存配置
  • 子类化和私有存储
  • 改良的认证处理
  • 丰富的代理模型
  • 通过文件系统上传和下载
作为一个iOS初学者的我,就不理NSURLConnection了,直接上NSURLSession
  NSURLSession的架构也很简单,NSURLSession本身就是一个统领,然后带着一个右将军NSURLSessionConfiguration,他是负责NSURLSession的各种配置的,然后还有一个左将军,他负责代理,也就是随时跟进老大的状态,然后到某个状态点的时候进行响应。最后就是一堆NSURLSessionTask小兵,他们负责完成实际的任务。 
 而NSURLSessionTask小兵其实也是个泛指,它实际上有分几个兵种:
  • NSURLSessionDataTask:普通的数据传输,拿到的数据是NSData格式,你可以根据数据原本的格式进行相应的转换。
  • NSURLSessionUploadTask:用于上传到网上的
  • NSURLSessionDownloadTask:用于下载,这个类与其它两个类有点不一样,这个类下载到的东西是直接写在一个临时文件中的,下载好之后它会给你一个临时文件的指针,然后自己手动保存。
 好,我们直接来着手开始实践,下面我们来请求一个比特币行情的API来获取他们的数据。新建一个项目,选择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     //3
10     NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
11         if (!error) {
12             //4
13             NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
14             //5
15             if (httpResponse.statusCode == 200) {
16                 //6
17                 NSString *string = [[NSString alloc] initWithData:data encoding:NSStringEncodingConversionAllowLossy];
18                 NSLog(@"%@",string);
19             }
20         }21     }];
22     //7
23     [dataTask resume];
24     
25     return self;
26 }

1、将URL打包成request

2、创建session,调用sharedSession表示使用默认配置来创建session
3、小兵出马,小兵NSURLSessionDataTask是直接从session里创建出来的,等于session调用dataTaskWithRequest方法来完成这个网络任务。传入request,再写一个block好让数据下载好的时候可以直接处理数据。block里面有三个参数,data就是你要获取的数据,response返回一些网络响应的信息,error可以处理错误。
4、将response的类型转换为NSHTTPURLResponse,才能拿到status code
5、当statusCode等于200时,表示网络没问题
6、处理一下数据,把它打印到终端
7、当然,最重要的是,完成以上步骤时,不要忘记调用这个resume来开始下载。
由于storyboard会自己调用initWithCoder:这个方法,所以我们直接把代码写在这个方法里。运行程序,就可以看到终端上显示 
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,返回的是正确的数据。 当然,上面代码为了省事,没用NSURLSessionConfiguration,其实可以把
NSURLSession *session = [NSURLSession sharedSession];

 

这一行代码换成    
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];

 

NSURLSessionConfiguration就是这样用的,当然,这个小程序暂时还用不着设置其他配置。
 
不过很有必要介绍一下NSURLSessionConfiguration的三个基本配置:
  • backgroundSessionConfiguration: —— 这个可以让你在后台进行下载,还有使用网络推送通知。
  • defaultSessionConfiguration  —— 这个是默认的配置,默认使用cache,cookie和credential等。
  • ephemeralSessionConfiguration —— 不使用cache,cookie和credential等。
  

转载于:https://www.cnblogs.com/fanjinlong/p/3834214.html

你可能感兴趣的文章
Codeforces Round #206 (Div. 2)
查看>>
**p
查看>>
优先队列详解
查看>>
VS2012 创建项目失败,,提示为找到约束。。。。
查看>>
设计类图
查看>>
类对象
查看>>
[Voice communications] 声音的滤波
查看>>
SQL语言之概述(一)
查看>>
软件建模——第9章 毕业论文管理系统—面向对象方法
查看>>
[SDOI2008]洞穴勘测
查看>>
Difference between Linearizability and Serializability
查看>>
IDEA使用操作文档
查看>>
UIView
查看>>
添加日期选择控件
查看>>
bzoj4765: 普通计算姬 (分块 && BIT)
查看>>
看完漫画秒懂区块链
查看>>
Oracle命令类别
查看>>
stc12c5a60s2驱动TEA5767收音机模块硬件调试总结
查看>>
vue中提示$index is not defined
查看>>
css选择器
查看>>