ios7引入了NSURLSession,通过它可以支持后台相关的网络操作的新特性:

1. 后台上传下载;

2.不需要通过nsoperation,直接用nsurlsession的api就可以做到网络操作的暂停和恢复。

3.作为可配置的容器:例如你可以设置http头的一些属性并且保存在session里,不用重复去做配置

4.可以子类化并支持私有配置的session

5.对鉴权的回调做了改进,此前nsurlconnection的鉴权回调无法和请求进行匹配,该回调可能来自任意的请求;而现在每个请求都可以在指定的代理方法

下面我们简单研究一下如何进行下载:

效果图:

主要代码:

1定义几个全局变量

@interface ViewController ()
{NSURLSessionDownloadTask * _task;NSData * _data;NSURLSession * _session;NSURLRequest * _request;UIProgressView * _pro;UIImageView * _imageView;}

2向视图中添加图片进度条

_imageView=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)];_imageView.center=self.view.center;[self.view addSubview:_imageView];_pro=[[UIProgressView alloc] initWithFrame:CGRectMake(_imageView.frame.origin.x, _imageView.frame.origin.y+400, 300, 40)];

3 向视图中添加按钮(同样的方式添加三个)

UIButton * button=[[UIButton alloc] initWithFrame:CGRectMake(50, _imageView.frame.origin.y+400+20, 50, 40)];button.backgroundColor=[UIColor blueColor];[button setTitle:@"开始" forState:UIControlStateNormal];[button addTarget:self action:@selector(ddLoad) forControlEvents:UIControlEventTouchUpInside];button.layer.borderWidth=1;button.layer.borderColor=[UIColor blueColor].CGColor;button.layer.cornerRadius=5;[self.view addSubview:button];

4 通过AFNetworkReachabilityManager网络状态监测

- (void) _checkNet{//开启网络状态监控
    [[AFNetworkReachabilityManager sharedManager] startMonitoring];[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {if(status==AFNetworkReachabilityStatusReachableViaWiFi){NSLog(@"当前是wifi");}if(status==AFNetworkReachabilityStatusReachableViaWWAN){NSLog(@"当前是3G");}
if(status==AFNetworkReachabilityStatusNotReachable){NSLog(@"当前是没有网络");}
if(status==AFNetworkReachabilityStatusUnknown){NSLog(@"当前是未知网络");}}];
}

5开始下载

- (void) ddLoad{NSURLSessionConfiguration * config=[NSURLSessionConfiguration defaultSessionConfiguration];_session=[NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];//
    NSURL *url=[NSURL URLWithString:@src];_request=[NSURLRequest requestWithURL:url];_task= [_session downloadTaskWithRequest:_request];NSLog(@"开始加载");[_task resume];
}

6 设置暂停和回复

- (void) pause{//暂停NSLog(@"暂停下载");[_task cancelByProducingResumeData:^(NSData *resumeData) {_data=resumeData;}];_task=nil;}
- (void) resume{//恢复NSLog(@"恢复下载");if(!_data){NSURL *url=[NSURL URLWithString:@src];_request=[NSURLRequest requestWithURL:url]; _task=[_session downloadTaskWithRequest:_request];}else{_task=[_session downloadTaskWithResumeData:_data];}[_task resume];
}

7 代理方法保存下载文件监控下载进度

#pragma mark - delegate
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{NSURL * url=[NSURL fileURLWithPath:@"/Users/jredu/Desktop/tt.png"];NSFileManager * manager=[NSFileManager defaultManager];[manager moveItemAtURL:location toURL:url error:nil];dispatch_async(dispatch_get_main_queue(), ^{NSData * data=[manager contentsAtPath:@"/Users/jredu/Desktop/tt.png"];UIImage * image=[[UIImage alloc ]initWithData:data];_imageView.image=image;UIAlertView * alert=[[UIAlertView alloc] initWithTitle:nil message:@"下载完成" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];[alert show];}) ;}- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTaskdidWriteData:(int64_t)bytesWrittentotalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{CGFloat progress=(totalBytesWritten*1.0)/totalBytesExpectedToWrite;dispatch_async(dispatch_get_main_queue(), ^{_pro.progress=progress;}) ;}

作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/ 
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:

转载于:https://www.cnblogs.com/jerehedu/p/5048533.html

NSURLSession下载相关推荐

  1. 使用 NSURLSession 开发一个支持后台下载和断点续传的下载工具

    NSURLSession 是 iOS 系统提供给我们的原生网络操作库,它提供了网络操作相关的一系列特性支持,比如缓存控制,Cookie管理,HTTP 认证处理等等,是一套整体的网络操作处理解决方案. ...

  2. iOS 后台下载及管理库

    说起下载第一个想起的就是ASI.一年前接手的新项目是核心功能是视频相关业务,在修改和解决视频下载相关的问题的时候让我体会到了ASI的下载的强大.后来新需求需要视频后台下载,使用NSURLSession ...

  3. 基于iOS 10、realm封装的下载器

    代码地址如下: http://www.demodashi.com/demo/11653.html 概要 在决定自己封装一个下载器前,我本以为没有那么复杂,可在实际开发过程中困难重重,再加上iOS10和 ...

  4. 基于iOS 10封装的下载器(支持存储读取、断点续传、后台下载、杀死APP重启后的断点续传等功能)

    原文 资源来自:http://www.cocoachina.com/ios/20170316/18901.html 概要 在决定自己封装一个下载器前,我本以为没有那么复杂,可在实际开发过程中困难重重, ...

  5. iOS进阶_下载管理器(封装下载用工具类)

    同步方法的应用场景: 1.抓取网络数据,如果开启多条线程异步抓取,很容易被封IP 2.加载本地文件,可以直接使用同步方法,比较简单 3. 加载要下载文件的头部信息,HEAD方法 -(void)demo ...

  6. (有码)NSURLSession

    NSURLSession下载,默认将下载的任务保存在tmp下,如果回调方法什么都没做,tmp文件会自动删除 基础: 使用单例session NSURL *url = [NSURL URLWithStr ...

  7. 李洪强经典面试题146-网络

    李洪强经典面试题146-网络   网络 http请求方式? 通常,HTTP的请求方式有3种,分别是:POST.GET.HEAD.POST和GET方法是用于数据发送的. POST:它将要发送的数据单独放 ...

  8. 【iOS开发】—— SDWebImage源码学习(未完)

    文章目录 什么是SDWebImage? sd_setImageWithURL调用关系 步骤一 步骤三 步骤四 步骤五 步骤六 下载步骤 UIImageView+ WebCache UIView+ We ...

  9. 仿微博视频边下边播之封装播放器

    来源:NewPan(@盼盼_HKbuy) 链接:http://www.jianshu.com/p/0d4588a7540f Tips:这次的内容分为两篇文章讲述 01.[iOS]仿微博视频边下边播之封 ...

最新文章

  1. 符合RESTful的接口规范
  2. 智能车声标定位相关算法优化
  3. linux局域网内根据ip查询主机名
  4. dm365工作笔记20130731
  5. 1682亿背后丨一分钟看懂天猫双11
  6. iQOO 5G版8月上市,价格更加亲民!
  7. LCS 最大子段和,最大子段和在原数组的首末地址
  8. 程序员过关斩将--你的业务是可变的吗
  9. python语法学习之对象与参考,局部与全局变量
  10. Web服务和Microsoft平台
  11. 为了找出最好用的安卓模拟器,我发起了一项众测
  12. 视频教程-Dubbo入门视频课程-Java
  13. iconfont-阿里巴巴矢量图标在界面中无法正常显示,表现为一个方块。
  14. 计算机上的符号在哪找,像w的那个符号在哪里可以找到?word文档
  15. oracle 两表关联查询
  16. 入行 AI,如何选个脚踏实地的岗位?
  17. python颜色对照表及颜色搭配
  18. 我如何选PHP开发工具(PHP IDE)
  19. 台式机电源相关参数说明
  20. aquarius_v13

热门文章

  1. 【深度学习再突破】让计算机一眼认出“猫”:哈佛提出新高维数据分析法
  2. 创建war类型的maven工程时报web.xml is missing and failOnMissingWebXml is set to true
  3. vue学习笔记(五):对于vuex的理解 + 简单实例
  4. SQL性能第1篇:关系优化
  5. 20191219算法题存档
  6. golang 代理地址
  7. php隐藏IP最后位,替换手机号中间数字为*号
  8. 多线程、线程池的创建方式,为什么阿里推荐自定义线程池?
  9. 垃圾回收算法与实现系列-锁在Java虚拟机中的实现和优化
  10. python输入框输入提交_python文本文件处理和用户输入