URLSession 的基本概念:
- NSURLSession是在 ios7.0推出的,用于替代 NSURLSession(本身就是与与NSURLConnection是并列
) - NSURLSession支持后台网络操作,除非用户强行关闭应用程序。
1、NSURLSession提供的功能:
- 通过URL将数据下载到内存
- 通过URL将数据下载到文件系统
- 将数据上传到指定URL
- 在后台完成上述功能
对于小型数据,例如用户登录、下载小图像、JSON & XML仍然使用NSURLConnection的异步或同步方法即可
NSURLConnection 和 NSURLSession的关系示意图
(NSURLSession可以在任何时候进行挂起和执行操作)
2、NSURLSession的代码体现
在使用NSURLSession的时候 URLRequest很大的程度上是可以被 NSURLSessionConfigration 替代。
如果使用 get 请求,URLRequest是可以省略的。
1. NSURLSession的基本的使用练习
这是一个最常规的写法:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self sesssionDemo];
}
// MARK: - 常规代码
- (void)sesssionDemo {
// 1. url
NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/demo.json"];
// 2. 如果使用 GET 请求,request 可以省略
// session - 苹果为了方便程序员的开发,提供了一个全局的 session 单例 (我们是直接获取的,不需要创建)
NSURLSession *session = [NSURLSession sharedSession];
// 3. 数据任务 - 所有的任务,都是由session 发起的
NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// 4.将得到数据进行返序列化
NSLog(@"%@", [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL]);
}];
// 4. 启动任务(一定要启动任务)
[task resume];
}
使用:
1. 创建一个 url 路径
2. 获取 session 的对象
3. 通过 session 对象发起会话 task
4. 启动 task 会话
注意:启动 task 会话后是在后台开启一条线程发起下载的任务,将数据从服务器加载到本地或者从本地上传的服务器。
我们在实际开发中使用的 NSURLSession 的精简模式:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self sesssionDemo];
}
// MARK: - 精简代码
- (void)sesssionDemo {
// 1. url
NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/demo.json"];
// 2. 启动会话
[self taskWithURL:url];
}
- (void)taskWithURL:(NSURL *)url {
// 1. 全局会话发起数据任务 - 所有的任务,都是由session 发起的
[[[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSLog(@"%@", [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL]);
}] resume];
}
在第三方框架对于 NSURLSession 的基本的封装思路就是这样,给一个 url ,后直接启动就可以了。
注意点:
为了方便程序员使用,苹果提供了一个全局 session ,[NSURLSession sharedSession]
所有的任务都是由 session 发起的,session 的回调是异步的