<1> NSURLSession 简介:
{
NSURLSession 是 iOS 7.0 之后推出的网络解决方案!用于替代 NSURLConnection, 针对下载/上传等复杂的网络操作提供了专门的解决方案!
NSURLSession 使用更加简单/方便!
}
<2> NSURLSession 中新增的内容:
{
1> 全局的 NSURLSession 对象: 所有的网络会话都由一个 NSURLSession 对象发起, 实例化一个 NSURLSession 对象有两种方法:
{
*1 对于简单的,不需要监听网络请求过程的网络会话来说,使用系统提供的,全局的 NSURLSession 单利对象:
NSURLSession *session = [NSURLSession sharedSession];
*2 如果需要监听网络进度,需要自定义一个 NSURLSession 对象,并且设置代理!这时还需要一个 NSURLSessionConfiguration,可以设置全局的网络访问属性.
NSURLSessionConfiguration *cfg = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:cfg delegate:self delegateQueue:[NSOperationQueue mainQueue]];
}
2> 网络任务(Task);在 NSURLSession 中,有三种网络任务类型.
{
*1 用于非文件下载的普通的 GET/POST请求 NSURLSessionDataTask.实例化对象有以下2种方法:
{
// 1> 通过一个 request 实例化普通网络任务,增加完成之后的 block 回调,使用比较多.
NSURLSessionDataTask *task = [self.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
}];
// 2> 通过一个 url 实例化普通网络任务,增加完成之后的 block 回调,使用比较多.
NSURLSessionDataTask *task = [self.session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
}];
}
*2 用于文件下载的网络任务 NSURLSessionDownloadTask (无论文件大小,下载都使用 NSURLSessionDownloadTask) ,实例化对象有以下三种方法:
{
// 1> 通过一个 request 实例化下载网络任务,增加任务完成之后的 block 回调,一般用在小文件下载.
NSURLSessionDownloadTask *task = [self.session downloadTaskWithRequest:request completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
}];
// 2> 通过一个 url 实例化下载网络任务,增加任务完成之后的 block 回调,一般用在小文件下载.
NSURLSessionDownloadTask *task = [self.session downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
}];
// 3> 通过之前下载的数据 ResumeData ,实例化一个下载任务,用于断点续传.
NSURLSessionDownloadTask *task = [session downloadTaskWithResumeData:ResumeData completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
}];
}
*3 用于文件上传的网络任务 NSURLSessionUploadTask.
{
// 目前,只有通过这种方式实例化的下载任务,才能实现文件上传.依然需要拼接数据.
NSURLSessionUploadTask *task = [session uploadTaskWithRequest:request fromData:fromData completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
//
}]
}
}
}
<3> NSURLSession 的使用分为三步:
{
1> 实例化一个 NSURLSession 对象 session ;
NSURLSession *session = [NSURLSession sharedSession];
2> 通过 NSURLSession 对象,实例化对应的网络任务 task;
NSURLSessionDataTask *task = [session dataTaskWithRequest:request];
3> 开启网络任务
[task resume];
}
}
{
NSURLSession 是 iOS 7.0 之后推出的网络解决方案!用于替代 NSURLConnection, 针对下载/上传等复杂的网络操作提供了专门的解决方案!
NSURLSession 使用更加简单/方便!
}
<2> NSURLSession 中新增的内容:
{
1> 全局的 NSURLSession 对象: 所有的网络会话都由一个 NSURLSession 对象发起, 实例化一个 NSURLSession 对象有两种方法:
{
*1 对于简单的,不需要监听网络请求过程的网络会话来说,使用系统提供的,全局的 NSURLSession 单利对象:
NSURLSession *session = [NSURLSession sharedSession];
*2 如果需要监听网络进度,需要自定义一个 NSURLSession 对象,并且设置代理!这时还需要一个 NSURLSessionConfiguration,可以设置全局的网络访问属性.
NSURLSessionConfiguration *cfg = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:cfg delegate:self delegateQueue:[NSOperationQueue mainQueue]];
}
2> 网络任务(Task);在 NSURLSession 中,有三种网络任务类型.
{
*1 用于非文件下载的普通的 GET/POST请求 NSURLSessionDataTask.实例化对象有以下2种方法:
{
// 1> 通过一个 request 实例化普通网络任务,增加完成之后的 block 回调,使用比较多.
NSURLSessionDataTask *task = [self.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
}];
// 2> 通过一个 url 实例化普通网络任务,增加完成之后的 block 回调,使用比较多.
NSURLSessionDataTask *task = [self.session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
}];
}
*2 用于文件下载的网络任务 NSURLSessionDownloadTask (无论文件大小,下载都使用 NSURLSessionDownloadTask) ,实例化对象有以下三种方法:
{
// 1> 通过一个 request 实例化下载网络任务,增加任务完成之后的 block 回调,一般用在小文件下载.
NSURLSessionDownloadTask *task = [self.session downloadTaskWithRequest:request completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
}];
// 2> 通过一个 url 实例化下载网络任务,增加任务完成之后的 block 回调,一般用在小文件下载.
NSURLSessionDownloadTask *task = [self.session downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
}];
// 3> 通过之前下载的数据 ResumeData ,实例化一个下载任务,用于断点续传.
NSURLSessionDownloadTask *task = [session downloadTaskWithResumeData:ResumeData completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
}];
}
*3 用于文件上传的网络任务 NSURLSessionUploadTask.
{
// 目前,只有通过这种方式实例化的下载任务,才能实现文件上传.依然需要拼接数据.
NSURLSessionUploadTask *task = [session uploadTaskWithRequest:request fromData:fromData completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
//
}]
}
}
}
<3> NSURLSession 的使用分为三步:
{
1> 实例化一个 NSURLSession 对象 session ;
NSURLSession *session = [NSURLSession sharedSession];
2> 通过 NSURLSession 对象,实例化对应的网络任务 task;
NSURLSessionDataTask *task = [session dataTaskWithRequest:request];
3> 开启网络任务
[task resume];
}
}