本人视频教程系列

导入AFNetworking 2.0 文件夹,引入头文件AFNetworking.h

---------------

*使用NSURLSessionDownloadTask来下载一张图片,并带有下载进度(以下两段代码是一起的,注意)

NSProgress为iOS7新增加的类

  1. // 定义一个progress指针
  2. NSProgress *progress;
  3.  
  4. // 创建一个URL链接
  5. NSURL *url = [NSURL URLWithString:\
  6. @"http://wallpapers.wallbase.cc/rozne/wallpaper-3020771.jpg"];
  7.  
  8. // 初始化一个请求
  9. NSURLRequest *request = [NSURLRequest requestWithURL:url];
  10.  
  11. // 获取一个Session管理器
  12. AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
  13.  
  14. // 开始下载任务
  15. NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithRequest:request progress:&progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response)
  16. {
  17. // 拼接一个文件夹路径
  18. NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
  19.  
  20. // 根据网址信息拼接成一个完整的文件存储路径并返回给block
  21. return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
  22.  
  23. } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error)
  24. {
  25. // 结束后移除掉这个progress
  26. [progress removeObserver:self
  27. forKeyPath:@"fractionCompleted"
  28. context:NULL];
  29. }];
  30.  
  31. // 设置这个progress的唯一标示符
  32. [progress setUserInfoObject:@"someThing" forKey:@"Y.X."];
  33. [downloadTask resume];
  34.  
  35. // 给这个progress添加监听任务
  36. [progress addObserver:self
  37. forKeyPath:@"fractionCompleted"
  38. options:NSKeyValueObservingOptionNew
  39. context:NULL];
  1. - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
  2. {
  3. if ([keyPath isEqualToString:@"fractionCompleted"] && [object isKindOfClass:[NSProgress class]]) {
  4. NSProgress *progress = (NSProgress *)object;
  5. NSLog(@"Progress is %f", progress.fractionCompleted);
  6.  
  7. // 打印这个唯一标示符
  8. NSLog(@"%@", progress.userInfo);
  9. }
  10. }

*使用AFHTTPRequestOperation下载图片的操作,不过,没有进度显示(源码中也没有相关方法-_-!)

  1. // 组织一个请求
  2. NSURLRequest *request = \
  3. [NSURLRequest requestWithURL:\
  4. [NSURL URLWithString:@"https://images0.cnblogs.com/i/607542/201404/050759358125578.png"]];
  5.  
  6. // 建立请求操作
  7. AFHTTPRequestOperation *requestOperation = \
  8. [[AFHTTPRequestOperation alloc] initWithRequest:request];
  9.  
  10. // 进行操作的配置(下载图片,还有其他的类型)
  11. requestOperation.responseSerializer = [AFImageResponseSerializer serializer];
  12.  
  13. // 设置获取数据的block
  14. [requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
  15. {
  16. // 源码中为并发线程池返回了主线程
  17. NSLog(@"Response: %@", responseObject);
  18.  
  19. } failure:^(AFHTTPRequestOperation *operation, NSError *error)
  20. {
  21. // 源码中为并发线程池返回了主线程
  22. NSLog(@"Image error: %@", error);
  23. }];
  24.  
  25. // 开始执行
  26. [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挂了,推出了甚至崩溃了,这个下载还是继续着的

  1. @interface DownloadsViewController ()
  2.  
  3. {
  4. AFURLSessionManager *manager;
  5. }
  6.  
  7. @end
  1. // 配置后台下载会话配置
  2. NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:@"downloads"];
  3.  
  4. // 初始化SessionManager管理器
  5. manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
  6.  
  7. // 获取添加到该SessionManager管理器中的下载任务
  8. NSArray *downloadTasks = [manager downloadTasks];
  9.  
  10. // 如果有下载任务
  11. if (downloadTasks.count)
  12. {
  13. NSLog(@"downloadTasks: %@", downloadTasks);
  14.  
  15. // 继续全部的下载链接
  16. for (NSURLSessionDownloadTask *downloadTask in downloadTasks)
  17. {
  18. [downloadTask resume];
  19. }
  20. }

按按钮添加一个下载任务到manager中

  1. - (void)addDownloadTask:(id)sender
  2. {
  3. // 组织URL
  4. NSURL *URL = [NSURL URLWithString:@"http://pic.cnitblog.com/avatar/607542/20140226182241.png"];
  5.  
  6. // 组织请求
  7. NSURLRequest *request = [NSURLRequest requestWithURL:URL];
  8.  
  9. // 给SessionManager管理器添加一个下载任务
  10. NSURLSessionDownloadTask *downloadTask = \
  11. [manager downloadTaskWithRequest:request
  12. progress:nil
  13. destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
  14. NSURL *documentsDirectoryPath = [NSURL fileURLWithPath:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]];
  15. return [documentsDirectoryPath URLByAppendingPathComponent:[targetPath lastPathComponent]];
  16. } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
  17. NSLog(@"File downloaded to: %@", filePath);
  18. }];
  19. [downloadTask resume];
  20.  
  21. // 打印下载的标示
  22. NSLog(@"%d", downloadTask.taskIdentifier);
  23. }

AFNetworking 2.0使用(持续更新)的更多相关文章

  1. How ASP.NET Web API 2.0 Works?[持续更新中…]

    一.概述 RESTful Web API [Web标准篇]RESTful Web API [设计篇] 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用 二.路由 ...

  2. Android 1.5-7.0(持续更新)安全机制一览

    Android 1.5 ProPolice to prevent stack buffer overruns (-fstack-protector),在缓冲区buffer与返回地址之间加入Canary ...

  3. IE源代码摘抄,基于泄漏的IE5.0(持续更新)

    下载了一份很久以前泄漏的IE5.0的源代码,虽然已经是很古远的版本了.但是通过调试现有版本浏览器与查看源代码,发现关键部分的差距并不是很大,代码很有参考意义.这里把重要的函数.数据结构摘抄出来以备参考 ...

  4. Hexo-butterfly-magicv3.0.1(持续更新中....)

    介绍 Hexo-butterfly魔改v3.0.1 软件架构 本项目是基于Hexo静态博客的个性主题---蝴蝶主题魔改版 安装教程 克隆 安装依赖 hexo命令生成public文件夹 启动hexo-s ...

  5. 私人网盘系统2.0—全部升级为layUI+PHP(持续更新中)shang

    网盘系统2.0   上周,我做了第一版的“私人网盘系统”,http://www.cnblogs.com/sunlizheng/p/7822036.html 没看过的朋友可以去看一下,这周在家升级做了第 ...

  6. 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的无状态模 ...

  7. [0]尝试用Unity3d制作一个王者荣耀(持续更新)->游戏规划

    太得闲了于是想写个农药,虽然可能会失败但是还是要试一试. 因为是自学的不是Unity专业的可能表达语言会有些不标准!望见谅! 结构: 以组件式(比如说摇杆控制和玩家部分的编写是分离的,可以自由拼装)作 ...

  8. AutoJS4.1.0实战教程 ---火热持续更新中

    这个时代假货太多,虚假广告更是充斥着整个互联网.尤其是那个传奇的我都无语了.好几个明xing代言,问题是太假了……我好奇的是那么虚假怎么就没人管呢,XX部干嘛呢……另外互联网刷视频赚钱就是个炒作.几百 ...

  9. Vue.js2.0中的变化(持续更新中)

    最近自己在学习Vue.js,在看一些课程的时候可能Vue更新太块了导致课程所讲知识和现在Vue的版本不符,从而报错,我会在以后的帖子持续更新Vue的变化与更新,大家也可以一起交流,共同监督学习! 1. ...

随机推荐

  1. hdu 5131 (2014广州现场赛 E题)

    题意:对给出的好汉按杀敌数从大到小排序,若相等,按字典序排.M个询问,询问名字输出对应的主排名和次排名.(排序之后)主排名是在该名字前比他杀敌数多的人的个数加1,次排名是该名字前和他杀敌数相等的人的个 ...

  2. oracle centos 静默安装

    http://blog.csdn.net/tongzidane/article/details/43852705 静默安装Oracle 11G过程中提示:Exception in thread &qu ...

  3. java8 - Optional

    mport java.util.Optional; import org.junit.Test; /* * 一.Optional 容器类:用于尽量避免空指针异常 * Optional.of(T t) ...

  4. 【LOJ】#2542. 「PKUWC2018」随机游走

    题解 虽然我知道minmax容斥,但是--神仙能想到把这个dp转化成一个一次函数啊= = 我们相当于求给定的\(S\)集合里最后一个被访问到的点的时间,对于这样的max的问题,我们可以用容斥把它转化成 ...

  5. 7-1 FireTruck 消防车 uva208

    题意: 输入一个n <=20 个结点的无向图以及某个结点k   按照字典序从小到大顺序输出从结点1到结点k的所有路径  要求结点不能重复经过 标准回溯法 要实现从小到大字典序 现在数组中排序好即 ...

  6. R语言编程艺术(1)快速入门

    这本书与手上其他的R语言参考书不同,主要从编程角度阐释R语言,而不是从统计角度.因为之前并没有深刻考虑这些,因此写出的代码往往是一条条命令的集合,并不像是“程序”,因此,希望通过学习这本书,能提高编程 ...

  7. Python并发编程-协程实现socketserver

    #server.py from gevent import monkey;monkey.patch_all() import socket import gevent sk = socket.sock ...

  8. Web应用扫描工具Wapiti

    Web应用扫描工具Wapiti   Wapiti是Kali Linux预置的一款Web应用扫描工具.该工具执行黑盒扫描,用户只需要输入要扫描的网址即可.该工具可以探测文件包含.数据库注入.XSS.CR ...

  9. 机器学习之路: tensorflow 自定义 损失函数

    git: https://github.com/linyi0604/MachineLearning/tree/master/07_tensorflow/ import tensorflow as tf ...

  10. 【BZOJ 3640】JC的小苹果 (高斯消元,概率DP)

    JC的小苹果 Submit: 432  Solved: 159 Description 让我们继续JC和DZY的故事. “你是我的小丫小苹果,怎么爱你都不嫌多!” “点亮我生命的火,火火火火火!” 话 ...