AFNetworking 2.0使用(持续更新)
导入AFNetworking 2.0 文件夹,引入头文件AFNetworking.h
---------------
*使用NSURLSessionDownloadTask来下载一张图片,并带有下载进度(以下两段代码是一起的,注意)
NSProgress为iOS7新增加的类
// 定义一个progress指针
NSProgress *progress; // 创建一个URL链接
NSURL *url = [NSURL URLWithString:\
@"http://wallpapers.wallbase.cc/rozne/wallpaper-3020771.jpg"]; // 初始化一个请求
NSURLRequest *request = [NSURLRequest requestWithURL:url]; // 获取一个Session管理器
AFHTTPSessionManager *session = [AFHTTPSessionManager manager]; // 开始下载任务
NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithRequest:request progress:&progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response)
{
// 拼接一个文件夹路径
NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil]; // 根据网址信息拼接成一个完整的文件存储路径并返回给block
return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]]; } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error)
{
// 结束后移除掉这个progress
[progress removeObserver:self
forKeyPath:@"fractionCompleted"
context:NULL];
}]; // 设置这个progress的唯一标示符
[progress setUserInfoObject:@"someThing" forKey:@"Y.X."];
[downloadTask resume]; // 给这个progress添加监听任务
[progress addObserver:self
forKeyPath:@"fractionCompleted"
options:NSKeyValueObservingOptionNew
context:NULL];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"fractionCompleted"] && [object isKindOfClass:[NSProgress class]]) {
NSProgress *progress = (NSProgress *)object;
NSLog(@"Progress is %f", progress.fractionCompleted); // 打印这个唯一标示符
NSLog(@"%@", progress.userInfo);
}
}
*使用AFHTTPRequestOperation下载图片的操作,不过,没有进度显示(源码中也没有相关方法-_-!)
// 组织一个请求
NSURLRequest *request = \
[NSURLRequest requestWithURL:\
[NSURL URLWithString:@"https://images0.cnblogs.com/i/607542/201404/050759358125578.png"]]; // 建立请求操作
AFHTTPRequestOperation *requestOperation = \
[[AFHTTPRequestOperation alloc] initWithRequest:request]; // 进行操作的配置(下载图片,还有其他的类型)
requestOperation.responseSerializer = [AFImageResponseSerializer serializer]; // 设置获取数据的block
[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
{
// 源码中为并发线程池返回了主线程
NSLog(@"Response: %@", responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
// 源码中为并发线程池返回了主线程
NSLog(@"Image error: %@", error);
}]; // 开始执行
[requestOperation start];
*下载队列,且能在后台下载,关闭了应用后还继续下载(这个功能好^_^)
Upload and download tasks in background sessions are performed by an external daemon instead of by the app itself. As a result, the transfers continue in the background even if the app is suspended, exits, or crashes.
在后台进行上传或者下载任务的会话,是被系统的程序管理而不是应用本身来管理的.所以呢,当app挂了,推出了甚至崩溃了,这个下载还是继续着的
@interface DownloadsViewController () {
AFURLSessionManager *manager;
} @end
// 配置后台下载会话配置
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:@"downloads"]; // 初始化SessionManager管理器
manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; // 获取添加到该SessionManager管理器中的下载任务
NSArray *downloadTasks = [manager downloadTasks]; // 如果有下载任务
if (downloadTasks.count)
{
NSLog(@"downloadTasks: %@", downloadTasks); // 继续全部的下载链接
for (NSURLSessionDownloadTask *downloadTask in downloadTasks)
{
[downloadTask resume];
}
}
按按钮添加一个下载任务到manager中
- (void)addDownloadTask:(id)sender
{
// 组织URL
NSURL *URL = [NSURL URLWithString:@"http://pic.cnitblog.com/avatar/607542/20140226182241.png"]; // 组织请求
NSURLRequest *request = [NSURLRequest requestWithURL:URL]; // 给SessionManager管理器添加一个下载任务
NSURLSessionDownloadTask *downloadTask = \
[manager downloadTaskWithRequest:request
progress:nil
destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
NSURL *documentsDirectoryPath = [NSURL fileURLWithPath:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]];
return [documentsDirectoryPath URLByAppendingPathComponent:[targetPath lastPathComponent]];
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
NSLog(@"File downloaded to: %@", filePath);
}];
[downloadTask resume]; // 打印下载的标示
NSLog(@"%d", downloadTask.taskIdentifier);
}
AFNetworking 2.0使用(持续更新)的更多相关文章
- How ASP.NET Web API 2.0 Works?[持续更新中…]
一.概述 RESTful Web API [Web标准篇]RESTful Web API [设计篇] 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用 二.路由 ...
- Android 1.5-7.0(持续更新)安全机制一览
Android 1.5 ProPolice to prevent stack buffer overruns (-fstack-protector),在缓冲区buffer与返回地址之间加入Canary ...
- IE源代码摘抄,基于泄漏的IE5.0(持续更新)
下载了一份很久以前泄漏的IE5.0的源代码,虽然已经是很古远的版本了.但是通过调试现有版本浏览器与查看源代码,发现关键部分的差距并不是很大,代码很有参考意义.这里把重要的函数.数据结构摘抄出来以备参考 ...
- Hexo-butterfly-magicv3.0.1(持续更新中....)
介绍 Hexo-butterfly魔改v3.0.1 软件架构 本项目是基于Hexo静态博客的个性主题---蝴蝶主题魔改版 安装教程 克隆 安装依赖 hexo命令生成public文件夹 启动hexo-s ...
- 私人网盘系统2.0—全部升级为layUI+PHP(持续更新中)shang
网盘系统2.0 上周,我做了第一版的“私人网盘系统”,http://www.cnblogs.com/sunlizheng/p/7822036.html 没看过的朋友可以去看一下,这周在家升级做了第 ...
- ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借
ASP.NET MVC深入浅出系列(持续更新) 一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...
- [0]尝试用Unity3d制作一个王者荣耀(持续更新)->游戏规划
太得闲了于是想写个农药,虽然可能会失败但是还是要试一试. 因为是自学的不是Unity专业的可能表达语言会有些不标准!望见谅! 结构: 以组件式(比如说摇杆控制和玩家部分的编写是分离的,可以自由拼装)作 ...
- AutoJS4.1.0实战教程 ---火热持续更新中
这个时代假货太多,虚假广告更是充斥着整个互联网.尤其是那个传奇的我都无语了.好几个明xing代言,问题是太假了……我好奇的是那么虚假怎么就没人管呢,XX部干嘛呢……另外互联网刷视频赚钱就是个炒作.几百 ...
- Vue.js2.0中的变化(持续更新中)
最近自己在学习Vue.js,在看一些课程的时候可能Vue更新太块了导致课程所讲知识和现在Vue的版本不符,从而报错,我会在以后的帖子持续更新Vue的变化与更新,大家也可以一起交流,共同监督学习! 1. ...
随机推荐
- day6作业--游戏人生
本节作业: 熟练使用类和模块,写一个交互性强.有冲突的程序. 思路: 1.各个模块之间的调用关系,如何使用类,各种方法的使用上面: 2.学了类,以为能用来解决所有问题,东西都要写在类里面: 3.下面自 ...
- VM ESXI 服务器虚拟化资料积累
编者按: 公司业务需求,公有云平台不能满足部署mac系统环境的需求,故租赁或托管物理机自行虚拟化,使用的工具就是VM ESXI .从部署到应用都没有遇到过什么问题,但是在今天发生VMware vSph ...
- Ionic实战七:Ionic 音乐以及社交页面
Ionic 音乐以及社交页面,可以用于二次开发,也可以用于社交或者音乐app页面模板,但是不足的是图片没法预览.      
- caffe 中 plot accuracy和loss, 并画出网络结构图
plot accuracy + loss 详情可见:http://www.2cto.com/kf/201612/575739.html 1. caffe保存训练输出到log 并绘制accuracy l ...
- UVA - 11995 - I Can Guess the Data Structure! STL 模拟
There is a bag-like data structure, supporting two operations: 1 x Throw an element x into the bag. ...
- Web服务评估工具Nikto
Web服务评估工具Nikto Nikto是一款Perl语言编写的Web服务评估工具.该工具主要侧重于发现网站的默认配置和错误配置.它通过扫描的方式,检测服务器.服务和网站的配置文件,从中找出默认配 ...
- 51Nod 快速傅里叶变换题集选刷
打开51Nod全部问题页面,在右边题目分类中找到快速傅里叶变换,然后按分值排序,就是本文的题目顺序. 1.大数乘法问题 这个……板子就算了吧. 2.美妙的序列问题 长度为n的排列,且满足从中间任意位置 ...
- Splay-Tree理解
简介 splay tree其实就是不停的旋转,没进行一个操作都要进行旋转:例如,当访问某一个结点的时候,会通过旋转其结点使得该结点变为树根,这样保证其的平均复杂度为O(nlogn); 其的操作包括: ...
- react中的children使用方法
使用过vue的小伙伴都知道vue中有个slot,也就是插槽,作用就是占位,那么再react中可以使用children来替代 父组件 render(){ return( <div> < ...
- X-010 FriendlyARM tiny4412 uboot移植之移植网卡驱动TFTP用起来
<<<<<<<<<<<<<<<<<<<<<<<<< ...