替代
可惜
在iOS9.0之后 之前使用的NSURLConnection
过期 苹果官方推荐使用NSURLSession
替代NSURLConnection
优势
- NSURLSession支持http2.0协议
- 处理下载任务的时候可以直接把数据下载到磁盘中
- 支持后台下载和上传
- 同一个session发送多次请求 只需要建立一次连接
- 提供了全局的session并且可以统一处理 使用更加方便
- 下载的时候是多线程异步处理 效率更高
NSURLSessionTask及其子类
NSURLSessionTask
本身是一个抽象类,在使用的时候,通常是根据具体的需求使用它的几个子类NSURLSessionDataTask
可以用来发送常见的Get,Post请求,既可以用来上传也可以用来下载NSURLSessionDownloadTask
可以用来发送下载请求,专门用来下载数据NSURLSessionUploadTask
可以用来发送上传请求,专门用来上传数据
发送Get请求
过程
- 确定请求路径
- 创建请求对象 (可以忽略这一步)
- 创建会话对象 (NSURLSession)
- 根据会话对象创建请求任务 (NSURLSessionDataTask)
- 得到服务器响应之后解析数据
- 执行请求任务
示例
1.确定请求路径
NSString *string = @"";
NSURL *url = [NSURL URLWithString:string];
string
就是自己的请求路径
2.创建请求对象
NSURLRequest *request = [NSURLRequest requestWithURL:url];
请求对象内部默认已经包含了请求头和请求方法
3.创建会话对象
NSURLSession *session = [NSURLSession sharedSession];
4.根据会话对象创建请求任务
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error == nil) {
} else {
}
}];
第一个参数 : 请求路径
第二个参数 : completionHandler回调 请求成功或者失败
data : 响应体信息 (期望的数据)
response : 响应头信息 主要是对服务器端的描述
error : 错误信息 请求成功error == nil 失败则有值
5.解析数据
//说明(此处返回的数据是JSON格式的,因此使用NSJSONSerialization进行反序列化处理)
if (error == nil) {
NSLog(@"Get请求返回的响应信息:%@",[NSJSONSerialization
JSONObjectWithData:data options:kNilOptions error:nil]);
} else {
NSLog(@"get error");
};
6.执行任务
[dataTask resume];
发送Post请求
过程
- 确定请求路径
- 创建可变的请求对象 (因为需要修改 这一步不可省略)
- 修改请求方法为post
- 创建会话对象
- 根据会话对象创建请求任务
- 得到服务器响应之后解析数据
- 执行任务
示例
1.确定请求路径
NSURL *url_post = [NSURL URLWithString:@"1"];
2.创建可变的请求对象
NSMutableURLRequest *request_post = [NSMutableURLRequest requestWithURL:url_post];
3.修改请求方法为post
request_post.HTTPMethod = @"POST";
4.创建会话对象
NSURLSession *session_post = [NSURLSession sharedSession];
5.根据会话对象创建请求任务
NSURLSessionDataTask *task_post = [session_post dataTaskWithRequest:request_post completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
}];
6.得到服务器响应之后解析数据
NSLog(@"Post请求返回的响应信息:%@",[NSJSONSerialization JSONObjectWithData:_mData options:kNilOptions error:nil]);
7.执行任务
[task_post resume];