3.)创建NSURLSession会话对象
可以通过采用iOS共享Session的方式
// 采用苹果提供的共享session
NSURLSession *sharedSession = [NSURLSession sharedSession];
可以通过NSURLSessionConfiguration方式配置不同的NSURLSession
// 构造NSURLSessionConfiguration
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
// 构造NSURLSession,网络会话;
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];
通过NSURLSessionConfiguration提供了三种创建NSURLSession的方式
defaultSessionConfiguration //默认配置使用的是持久化的硬盘缓存,存储证书到用户钥匙链。存储cookie到shareCookie。 ephemeralSessionConfiguration //不使用永久持存cookie、证书、缓存的配置,最佳优化数据传输。 backgroundSessionConfigurationWithIdentifier //可以上传下载HTTP和HTTPS的后台任务(程序在后台运行)。在后台时,将网络传输交给系统的单独的一个进程,即使app挂起、推出甚至崩溃照样在后台执行。
也可以通过NSURLSessionConfiguration统一设置超时时间、请求头等信息
// 构造NSURLSessionConfiguration
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
//设置请求超时为10秒钟
configuration.timeoutIntervalForRequest = 10;
//在蜂窝网络情况下是否继续请求(上传或下载)
configuration.allowsCellularAccess = NO;
//配置请求头
configuration.HTTPAdditionalHeaders =@{@"Content-Encoding":@"gzip"};
4.) 创建NSURLSessionTask对象,然后执行
// 构造NSURLSessionTask,会话任务;
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
// 请求失败,打印错误信息
if (error) {
NSLog(@"get error :%@",error.localizedDescription);
}
//请求成功,解析数据
else {
// JSON数据格式解析
id object = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&error];
// 判断是否解析成功
if (error) {
NSLog(@"get error :%@",error.localizedDescription);
}else {
NSLog(@"get success :%@",object);
// 解析成功,处理数据,通过GCD获取主队列,在主线程中刷新界面。
dispatch_async(dispatch_get_main_queue(), ^{
// 刷新界面....
});
}
}
}];
iOS为了适应不同的应用场景提供了不同类型的NSSessionTask
NSURLSessionDataTask //一般的get、post等请求 NSURLSessionUploadTask // 用于上传文件或者数据量比较大的请求 NSURLSessionDownloadTask //用于下载文件或者数据量比较大的请求 NSURLSessionStreamTask //建立一个TCP / IP连接的主机名和端口或一个网络服务对象。









