一般情况下主动取消请求的需求不会太多

除非以下几种情况

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];
}

下面是类别方法

Paste_Image.png

下面来看下 取消请求的代码段

我这边是用runtime 再一个VC消失的时候触发了取消请求操作

Paste_Image.png

//类别方法取消请求

Paste_Image.png

Paste_Image.png

操作runtime 用了开源

import"Aspects.h"

这只是思路 字典的存取没做线程安全控制 可以改进很多地方

如果不是每一个VC都有这种需求,可以通过维护特定的VC列表来 避免所有的VC做判断。

现在看来我们每个VC 没有做额外的工作 只是添加删除队列 就可以完成界面消失的时候自动取消请求的需求。

==============推广=================

我有故事你有酒吗?

我有酒 ,而且只有酒 ,因为我穷得只剩酒。

北上广里有故事,有梦想,有爱情 ,有八卦,有生活。

来[北上广]听听他们的故事吧

下载IOS版本:http://7x2x43.com1.z0.glb.clouddn.com/bsgwbtt.html

或者appStore 搜北上广

[北上广]-献给专注实现梦想的你

基于AFNetworking 3.0的取消已发出的网络请求的更多相关文章

  1. iOS开发--Swift 基于AFNetworking 3.0的网络请求封装

    Swift和OC基于AFNetworking的网络请求流程相同, 就是语法不同, 对于Swift语法不是很清楚的同学, 建议多看看API文档, 自己多多尝试. 写过OC的应该都明白每句话做什么的, 就 ...

  2. 基于AFNetWorking 3.0封装网络请求数据的类

    对于使用 AFNetworking 的朋友来说,很多朋友都是直接调用 AFNetworking的 API ,这样不太好,无法做到全工程统一配置. 最好的方式就是对网络层再封装一层,全工程不允许直接使用 ...

  3. Swift3.0封装 AFN 的 GET&POST网络请求

    // // PSNetWorkManage.swift // WeiBoSwift // // Created by 思 彭 on 16/9/25. // Copyright © 2016年 思 彭. ...

  4. AFNetworking 3.0迁移指南

    AFNetworking是一款在OS X和iOS下都令人喜爱的网络库.为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持. ...

  5. [转]AFNetworking 3.0迁移指南

    http://www.jianshu.com/p/047463a7ce9b?utm_campaign=hugo&utm_medium=reader_share&utm_content= ...

  6. iOS开发之网络请求(基于AFNetworking的再封装)

    最近一直很忙也没有什么时间写博客了.放假了休息一下,就写一篇博客来总结一下最近做项目中出现过的问题吧!!! 首先,在项目中我的起到了什么作用,无非就是把美工(UI设计师)给我们的图显示出来,然后再和服 ...

  7. AFNetworking 3.0 源码解读(三)之 AFURLRequestSerialization

    这篇就讲到了跟请求相关的类了 关于AFNetworking 3.0 源码解读 的文章篇幅都会很长,因为不仅仅要把代码进行详细的的解释,还会大概讲解和代码相关的知识点. 上半篇: URI编码的知识 关于 ...

  8. AFNetworking 3.0 源码解读(五)之 AFURLSessionManager

    本篇是AFNetworking 3.0 源码解读的第五篇了. AFNetworking 3.0 源码解读(一)之 AFNetworkReachabilityManager AFNetworking 3 ...

  9. LXNetwork – 基于AF3.0封装的iOS网络请求库

    本框架实现思路与YTKNetwork和RTNetworking类似,相当于一个简单版,把每一个网络请求封装成对象.使用LXNetwork,你的每一个请求都需要继承LXBaseRequest类,通过覆盖 ...

随机推荐

  1. Aspose.Words 直接写response导出docx文档显示文件已损坏需要修复的解决办法

    使用Aspose.Words的Document.Save(HttpResponse response, string fileName, ContentDisposition contentDispo ...

  2. [探索]点点轻博客搬家到WordPress(一)

    摘要:点点博客备份XML通过DiandianToWordpress-beta.sh(文末给出)搬家到Wordpress博客 本人曾使用过点点轻博客,也深知像点点博客,Lofter博客导出的XML文件不 ...

  3. javascript脚本化文档

    1.getElememtById /** * 获取指定id的的元素数组 */ function getElements(/*ids...*/) { var elements = {}; for(var ...

  4. WinXP 无线技巧“区域没有通过无线网络中的发现”一个可能的原因!

    貌似WinXP经典或无限.我一直沿用至今,我不知道这一天会放弃. 遇到的问题,也许有XP爱好者都遇到过还得看,写下一点文字注释.----------------------- 切割线 -------- ...

  5. jQuery获取Radio选择的Value值||两个select之间option的互相添加操作(jquery实现)

    jQuery获取Radio选择的Value值: 1. $("input[name='radio_name'][checked]").val();  //选择被选中Radio的Val ...

  6. Ibatis ISqlMapper工厂类案例

    namespace Model{ public class MapperFactory { //声明一个ISqlMapper接口类型的数据映射器 _mapper,其初始值为null private s ...

  7. Javascript多线程引擎(一)

    Javascript多线程引擎(一) Javascript 天生是单线程的语言, 不支持synchronized等线程操作, 但是这便不妨碍Javascript作为web语言中最具有魅力语言之一. 虽 ...

  8. Smith Numbers - PC110706

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/uva10042.html 原创:Smit ...

  9. NET 类库

    NET 类库研究必备参考 扣丁格鲁 .NET 类库的强大让我们很轻松的解决常见问题,作为一个好专研的程序员,为了更上一层楼,研究CLR的基础类库实现是快速稳定的捷径. 一般场景下,采用 Reflect ...

  10. C程序设计语言(第二版)习题:第一章

    第一章虽然感觉不像是个习题.但是我还是认真去做,去想,仅此而已! 练习 1-1 Run the "hello, world" program on your system. Exp ...