基于AFNetworking 3.0的取消已发出的网络请求
一般情况下主动取消请求的需求不会太多
除非以下几种情况
1.比如电商应用为例 请求频繁,数据量大
2.对性能的要求比较高
3.网络环境比较差
当一个用户打开一个界面 看到的却是漫长的等待框 这时候用户很可能退出当前界面 浏览其他界面。再以上几种情况下 我们有必要做网络资源的控制。当一个请求发送以后,没必要等他的结果的时候我们就应该主动取消请求。
主动取消请求不仅节省了网络资源 ,还可以避免block引用VC导致的延迟内存释放问题。现在很多网络框架都支持这种操作,只要你拿到请求队列随时可以发起/取消请求。为了操作队列我们会VC里持有队列,设计角度上每个需要请求的VC都持有若干个队列,而且手动的取消请求 显得特别麻烦。
我这边设计的主要思路是:
通过类别来动态管理请求队列,避免VC直接持有请求队列。
通过runtime来自动触发取消请求操作。
下面是代码
AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
for(int i =0 ; i < 10 ; i++) {
NSURLSessionDataTask *dataTask = [session GET:@"https://api.github.com/users/facebook" parameters:@[] progress:^(NSProgress * _Nonnull downloadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[self removeTask:task];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[self removeTask:task];
}];
[self addTask:dataTask];
}
下面是类别方法
下面来看下 取消请求的代码段
我这边是用runtime 再一个VC消失的时候触发了取消请求操作
//类别方法取消请求
操作runtime 用了开源
import"Aspects.h"
这只是思路 字典的存取没做线程安全控制 可以改进很多地方
如果不是每一个VC都有这种需求,可以通过维护特定的VC列表来 避免所有的VC做判断。
现在看来我们每个VC 没有做额外的工作 只是添加删除队列 就可以完成界面消失的时候自动取消请求的需求。
==============推广=================
我有故事你有酒吗?
我有酒 ,而且只有酒 ,因为我穷得只剩酒。
北上广里有故事,有梦想,有爱情 ,有八卦,有生活。
来[北上广]听听他们的故事吧
下载IOS版本:http://7x2x43.com1.z0.glb.clouddn.com/bsgwbtt.html
或者appStore 搜北上广
[北上广]-献给专注实现梦想的你
基于AFNetworking 3.0的取消已发出的网络请求的更多相关文章
- iOS开发--Swift 基于AFNetworking 3.0的网络请求封装
Swift和OC基于AFNetworking的网络请求流程相同, 就是语法不同, 对于Swift语法不是很清楚的同学, 建议多看看API文档, 自己多多尝试. 写过OC的应该都明白每句话做什么的, 就 ...
- 基于AFNetWorking 3.0封装网络请求数据的类
对于使用 AFNetworking 的朋友来说,很多朋友都是直接调用 AFNetworking的 API ,这样不太好,无法做到全工程统一配置. 最好的方式就是对网络层再封装一层,全工程不允许直接使用 ...
- Swift3.0封装 AFN 的 GET&POST网络请求
// // PSNetWorkManage.swift // WeiBoSwift // // Created by 思 彭 on 16/9/25. // Copyright © 2016年 思 彭. ...
- AFNetworking 3.0迁移指南
AFNetworking是一款在OS X和iOS下都令人喜爱的网络库.为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持. ...
- [转]AFNetworking 3.0迁移指南
http://www.jianshu.com/p/047463a7ce9b?utm_campaign=hugo&utm_medium=reader_share&utm_content= ...
- iOS开发之网络请求(基于AFNetworking的再封装)
最近一直很忙也没有什么时间写博客了.放假了休息一下,就写一篇博客来总结一下最近做项目中出现过的问题吧!!! 首先,在项目中我的起到了什么作用,无非就是把美工(UI设计师)给我们的图显示出来,然后再和服 ...
- AFNetworking 3.0 源码解读(三)之 AFURLRequestSerialization
这篇就讲到了跟请求相关的类了 关于AFNetworking 3.0 源码解读 的文章篇幅都会很长,因为不仅仅要把代码进行详细的的解释,还会大概讲解和代码相关的知识点. 上半篇: URI编码的知识 关于 ...
- AFNetworking 3.0 源码解读(五)之 AFURLSessionManager
本篇是AFNetworking 3.0 源码解读的第五篇了. AFNetworking 3.0 源码解读(一)之 AFNetworkReachabilityManager AFNetworking 3 ...
- LXNetwork – 基于AF3.0封装的iOS网络请求库
本框架实现思路与YTKNetwork和RTNetworking类似,相当于一个简单版,把每一个网络请求封装成对象.使用LXNetwork,你的每一个请求都需要继承LXBaseRequest类,通过覆盖 ...
随机推荐
- Aspose.Words 直接写response导出docx文档显示文件已损坏需要修复的解决办法
使用Aspose.Words的Document.Save(HttpResponse response, string fileName, ContentDisposition contentDispo ...
- [探索]点点轻博客搬家到WordPress(一)
摘要:点点博客备份XML通过DiandianToWordpress-beta.sh(文末给出)搬家到Wordpress博客 本人曾使用过点点轻博客,也深知像点点博客,Lofter博客导出的XML文件不 ...
- javascript脚本化文档
1.getElememtById /** * 获取指定id的的元素数组 */ function getElements(/*ids...*/) { var elements = {}; for(var ...
- WinXP 无线技巧“区域没有通过无线网络中的发现”一个可能的原因!
貌似WinXP经典或无限.我一直沿用至今,我不知道这一天会放弃. 遇到的问题,也许有XP爱好者都遇到过还得看,写下一点文字注释.----------------------- 切割线 -------- ...
- jQuery获取Radio选择的Value值||两个select之间option的互相添加操作(jquery实现)
jQuery获取Radio选择的Value值: 1. $("input[name='radio_name'][checked]").val(); //选择被选中Radio的Val ...
- Ibatis ISqlMapper工厂类案例
namespace Model{ public class MapperFactory { //声明一个ISqlMapper接口类型的数据映射器 _mapper,其初始值为null private s ...
- Javascript多线程引擎(一)
Javascript多线程引擎(一) Javascript 天生是单线程的语言, 不支持synchronized等线程操作, 但是这便不妨碍Javascript作为web语言中最具有魅力语言之一. 虽 ...
- Smith Numbers - PC110706
欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/uva10042.html 原创:Smit ...
- NET 类库
NET 类库研究必备参考 扣丁格鲁 .NET 类库的强大让我们很轻松的解决常见问题,作为一个好专研的程序员,为了更上一层楼,研究CLR的基础类库实现是快速稳定的捷径. 一般场景下,采用 Reflect ...
- C程序设计语言(第二版)习题:第一章
第一章虽然感觉不像是个习题.但是我还是认真去做,去想,仅此而已! 练习 1-1 Run the "hello, world" program on your system. Exp ...