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. ...
随机推荐
- hdu 5131 (2014广州现场赛 E题)
题意:对给出的好汉按杀敌数从大到小排序,若相等,按字典序排.M个询问,询问名字输出对应的主排名和次排名.(排序之后)主排名是在该名字前比他杀敌数多的人的个数加1,次排名是该名字前和他杀敌数相等的人的个 ...
- oracle centos 静默安装
http://blog.csdn.net/tongzidane/article/details/43852705 静默安装Oracle 11G过程中提示:Exception in thread &qu ...
- java8 - Optional
mport java.util.Optional; import org.junit.Test; /* * 一.Optional 容器类:用于尽量避免空指针异常 * Optional.of(T t) ...
- 【LOJ】#2542. 「PKUWC2018」随机游走
题解 虽然我知道minmax容斥,但是--神仙能想到把这个dp转化成一个一次函数啊= = 我们相当于求给定的\(S\)集合里最后一个被访问到的点的时间,对于这样的max的问题,我们可以用容斥把它转化成 ...
- 7-1 FireTruck 消防车 uva208
题意: 输入一个n <=20 个结点的无向图以及某个结点k 按照字典序从小到大顺序输出从结点1到结点k的所有路径 要求结点不能重复经过 标准回溯法 要实现从小到大字典序 现在数组中排序好即 ...
- R语言编程艺术(1)快速入门
这本书与手上其他的R语言参考书不同,主要从编程角度阐释R语言,而不是从统计角度.因为之前并没有深刻考虑这些,因此写出的代码往往是一条条命令的集合,并不像是“程序”,因此,希望通过学习这本书,能提高编程 ...
- Python并发编程-协程实现socketserver
#server.py from gevent import monkey;monkey.patch_all() import socket import gevent sk = socket.sock ...
- Web应用扫描工具Wapiti
Web应用扫描工具Wapiti Wapiti是Kali Linux预置的一款Web应用扫描工具.该工具执行黑盒扫描,用户只需要输入要扫描的网址即可.该工具可以探测文件包含.数据库注入.XSS.CR ...
- 机器学习之路: tensorflow 自定义 损失函数
git: https://github.com/linyi0604/MachineLearning/tree/master/07_tensorflow/ import tensorflow as tf ...
- 【BZOJ 3640】JC的小苹果 (高斯消元,概率DP)
JC的小苹果 Submit: 432 Solved: 159 Description 让我们继续JC和DZY的故事. “你是我的小丫小苹果,怎么爱你都不嫌多!” “点亮我生命的火,火火火火火!” 话 ...