学习使用NSURLSession

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

 
NSURLSession带来了这些新的好处:
  • 后台上传和下载
  • 可以暂停和继续连接网络
  • 保存配置
  • 子类化和私有存储
  • 改良的认证处理
  • 丰富的代理模型
  • 通过文件系统上传和下载
作为一个iOS初学者的我,就不理NSURLConnection了,直接上NSURLSession
学习使用NSURLSession
 
 
NSURLSession的架构也很简单,NSURLSession本身就是一个统领,然后带着一个右将军NSURLSessionConfiguration ,他是负责NSURLSession的各种配置的,然后还有一个左将军,他负责代理,也就是随时跟进老大的状态,然后到某个状态点的时候进行响应。最后就是一堆NSURLSessionTask小兵,他们负责完成实际的任务。
 
学习使用NSURLSession
 
而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的三个基本配置:
 
 

 

你可能感兴趣的:(session)