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 ...
随机推荐
- BZOJ2160: 拉拉队排练
Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训 ...
- Android中,利用Intent传递对象值
在很多情况下,调用startActivity(Intent) 方法,跳转到另外一个Activity或其他component,需要传递一个对象给它. 可以让这个要传递的对象所属类实现Serializab ...
- WorldFinal11 (2/11)
WorldFinal 11 Trash Removal 题意 给你一个多边形,问这个多边形至少需要多宽的长度,才能把这个多边形放进去. 数据范围100 题解 数据范围只有100,暴力枚举两点,然后算最 ...
- ant design的一些坑
1.在本地修改ant design的某些样式可以生效,但在线上就失效了.比如collapse组件里的箭头图标在本地和在线上的类名有变化,本地类名,线上类名:箭头图标的svg样式在线上会自动添加一个内联 ...
- 使用36-pin的STM32输出VGA, VGA output using a 36-pin STM32
使用36-pin的STM32输出VGA 手头上有个项目需要通过单片机来控制将图像显示在LCD上,在网上搜了一阵子,发现都是使用的FPGA做的, 开始自己对FPGA不是很熟,一直在用的也是ARM系列的, ...
- x86 TargetPlatform with XBAPs
I've got a XAML Browser Hosted Application (XBAP) project that has a dependency on another project t ...
- 在ASP.NET MVC中使用Knockout实践09,自定义绑定
Knockout真正强大之处在于绑定机制,通过data-bind属性值体现绑定,不仅可以绑定值,还可以绑定事件,甚至可以自定义绑定. 从一个例子看Knockou的绑定机制 假设想给一个button元素 ...
- delphi Format格式化函数
Format是一个很常用,却又似乎很烦的方法,本人试图对这个方法的帮助进行一些翻译,让它有一个完整的概貌,以供大家查询之用: 首先看它的声明:function Format(const Format: ...
- ASIHTTPRequestErrorDomain Code=5
ASIHttpRequest解析带空格的URL时 出错!!!(已解决) 用的是post请求 URL 地址是: http://111.234.51.56/login_member.pl?time=201 ...
- 安装oracle 11g环境变量ORACLE_HOME的一个问题 转
http://blog.itpub.net/26129555/viewspace-1243467/报错内容: OUI-10137:An Oracle Home with name ORACLE_HOM ...