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. ...
随机推荐
- CF 586B 起点到终点的最短路和次短路之和
起点是右下角 终点是左上角 每次数据都是两行的点 输入n 表示有n列 接下来来的2行是 列与列之间的距离 最后一行是 行之间的距离 枚举就行 Sample test(s) input 41 ...
- 简单实现textview文本每隔两秒就改变一次
//这个方法可以实现文本每隔两秒就改变一次, public void textTask(){ final android.os.Handler handler=new android.os.Handl ...
- 黑马程序员_java基础笔记(09)...HTML基本知识、CSS、JavaScript、DOM
—————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 基本标签(a.p.img.li.table.div.span).表单标签.ifra ...
- VPS开启Google BBR
前言:系统环境为Ubuntu 18.04 修改系统变量: echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf ec ...
- V-by-one
一:v-by-one技术产生背景 LVDS已经在业界盛行多年,近来电视解析度和播放格式的进展已经导致频宽需求大幅增加,具有60Hz和120Hz甚至240Hz更新频率的电视已经在商店内 贩售.2 ...
- 虚拟机zookeeper和hbase集群搭建
集群zookeeper dataDir=/usr/local/zookeeper/dataDir dataLogDir=/usr/local/zookeeper/dataLogDir # the po ...
- CSUOJ 1895 Apache is late again
Description Apache is a student of CSU. There is a math class every Sunday morning, but he is a very ...
- CSUOJ 1162 Balls in the Boxes 快速幂
Description Mr. Mindless has many balls and many boxes,he wants to put all the balls into some of th ...
- MDP中值函数的求解
MDP概述 马尔科夫决策过程(Markov Decision Process)是强化学习(reinforcement learning)最基本的模型框架.它对序列化的决策过程做了很多限制.比如状态 ...
- Initializing the FallBack certificate failed . TDSSNIClient initialization failed
安装SQL后服务不能启动,报错: 2014-03-24 14:33:10.06 spid13s Error: 17190, Severity: 16, State: 1.2014-03-24 ...