NSURLSession下载
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(, , , )];
- _imageView.center=self.view.center;
- [self.view addSubview:_imageView];
- _pro=[[UIProgressView alloc] initWithFrame:CGRectMake(_imageView.frame.origin.x, _imageView.frame.origin.y+, , )];
3 向视图中添加按钮(同样的方式添加三个)
- UIButton * button=[[UIButton alloc] initWithFrame:CGRectMake(, _imageView.frame.origin.y++, , )];
- button.backgroundColor=[UIColor blueColor];
- [button setTitle:@"开始" forState:UIControlStateNormal];
- [button addTarget:self action:@selector(ddLoad) forControlEvents:UIControlEventTouchUpInside];
- button.layer.borderWidth=;
- button.layer.borderColor=[UIColor blueColor].CGColor;
- button.layer.cornerRadius=;
- [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 *)downloadTask
- didWriteData:(int64_t)bytesWritten
- totalBytesWritten:(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/
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:

NSURLSession下载的更多相关文章
- IOS 网络浅析-(十 NSURLSession下载简介)
之前本来打算在写两个篇幅,但是在这片开写的时候觉得还是写一个比较好,有利于理解.NSURLSession下载是通过NSURLSession下载代理实现的,上一片也介绍了代理,之所以没有介绍下载是因为, ...
- iOS NSURLSession 下载
周五的时候,有个新的需求,要下载脚本,帮助玩家自动打怪,应该也是挂机的意思吧! 组长让我设计界面,让汤老师设计数据等.我觉得数据的挑战性更大一点,然后就接过来了. 自己还没有形成互联网思维,所以弄了一 ...
- 利用NSURLSession下载视频,图片,能实现断点续传
首先分析下载资源到本地,就得有URL ,点击btn ,就会解析网络地址,获取数据,就得有进度条控件 NSURLSession类的实现,通过委托代理模式去实现一些方法,需遵守<NSURLSessi ...
- NSURLSession下载和断点续传
NSURLSession是iOS7之后新的网络接口,和经常用到NSURLConnection是类似的.在程序在前台时,NSURLSession与NSURLConnection可以相互的替代.但是当用户 ...
- NSURLSession下载文件-代理
- 3.1 涉及知识点(1)创建NSURLSession对象,设置代理(默认配置) ```objc //1.创建NSURLSession,并设置代理 /* 第一个参数:session对象的全局配置设置 ...
- iOS 学习 - 10下载(3) NSURLSession 音乐 篇
使用 NSURLSession 下载,需要注意的是文件下载文件之后会自动保存到一个临时目录,需要开发人员自己将此文件重新放到其他指定的目录中 // // ViewController.m // Web ...
- iOS开发——网络Swift篇&NSURLSession加载数据、下载、上传文件
NSURLSession加载数据.下载.上传文件 NSURLSession类支持三种类型的任务:加载数据.下载和上传.下面通过样例分别进行介绍. 1,使用Data Task加载数据 使用全局的 ...
- 使用NSURLSession获取网络数据和下载文件
使用NSURLSession获取网络数据 使用NSURLSession下载文件
- Swift - 使用NSURLSession加载数据、下载、上传文件
NSURLSession类支持三种类型的任务:加载数据.下载和上传.下面通过样例分别进行介绍. 1,使用Data Task加载数据 使用全局的sharedSession()和dataTaskWithR ...
随机推荐
- 8.4 正睿暑期集训营 Day1
目录 2018.8.4 正睿暑期集训营 Day1 A 数对子 B 逆序对 C 盖房子 考试代码 A B C 2018.8.4 正睿暑期集训营 Day1 时间:4.5h(实际) 期望得分:30+50+3 ...
- Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息
Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息 本文目录: 获取手机信息 设置权限 申请权限 查询联系人 获取手机定位信息 调用高德地图,设置显示2个坐标点的位置,以及 ...
- AtomicReference,AtomicStampedReference与AtomicMarkableReference的区别
AtomicReference 通过volatile和Unsafe提供的CAS函数实现原子操作. 自旋+CAS的无锁操作保证共享变量的线程安全 value是volatile类型,这保证了:当某线程修改 ...
- 马士兵hadoop第四课:Yarn和Map/Reduce配置启动和原理讲解
马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...
- pop3_用Java发送图文并茂的HTML邮件
package com.syj; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.i ...
- SPI SWD Protocol Implement
//================================================================================= // ARM SWD Mode ...
- Revit API取得变量的内参名称
与取得元素变量的内参名称类别有个BuiltInParameter //取得内参名称 [Transaction(TransactionMode.Manual)] [Regeneration(Regene ...
- CTreeCtrl和CListCtrl失去焦点时高亮选中项
设置CTreeCtrl的Always Show Selection:TrueCListCtrl的Always Show Selection:False在NM_CUSTOMDRAW事件中添加如下代码: ...
- delphi 处理缩放图像
procedure TTMEImageDeviceIdentifyFrom.DrawText(AImage : TImage; AFile: string);var I: Integer; iWidt ...
- Delphi数学运算当中四舍五入的问题
在最近版本的Delphi Pascal 编译器中,Round 函数是以 CPU 的 FPU (浮点部件) 处理器为基础的.这种处理器采用了所谓的 "银行家舍入法",即对中间值 (如 ...