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

下面是类别方法

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 搜北上广

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

时间: 2024-08-24 20:44:40

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

基于AFNetworking 3.0的集约性网络请求API再封装

基础请求 http://www.cnblogs.com/superbobo/p/5259304.html 音视频.文件下载: http://www.jianshu.com/p/f76830810b35

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

// // PSNetWorkManage.swift // WeiBoSwift // // Created by 思 彭 on 16/9/25. // Copyright © 2016年 思 彭. All rights reserved. // import UIKit import AFNetworking // Swift的枚举支持任意数据类型,不需要,分隔 enum PSHTTPMethod{ case GET case POST } /// 网络管理工具 class PSNetWor

【IOS】AFNetworking 2.0中XML请求处理专题

AFNetworking 2.0中XML请求处理专题 1.1     XML请求处理 1.1.1  xml处理机制 因为AFNetworking2.0中,对于响应返回的xml格式没有做专门的解析处理,因此需要开发者自己来做处理.在笔者的项目中,使用了一个叫AFGDataXMLRequestOperation的第三方类库来统一处理. 该库的xml解析逻辑基于GDataXML-HTML类库.不过类库处理逻辑应该还是基于AFNetworking 1.0版本,有两处需要做适配修改,不然调试不过: 1.在

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

最近一直很忙也没有什么时间写博客了.放假了休息一下,就写一篇博客来总结一下最近做项目中出现过的问题吧!!! 首先,在项目中我的起到了什么作用,无非就是把美工(UI设计师)给我们的图显示出来,然后再和服务器进行交互. 那个我们和服务器怎么交互呢?最简单的方式就是说话呗,但是我们要跟服务器说话必须通过我们彼此能听的懂的话来交流,也就需要制定很多的协议了(http,tcp,udp等,这个有兴趣的朋友可以了解一下网络协议的东西).但是我平常最常使用的还是http协议. http://www.cnblog

SQL Server &#39;已超过了锁请求超时时段&#39; 问题解决方法

SQL 有时遇到 已超过了锁请求超时时段. (Microsoft SQL Server,错误: 1222) 这个错误,刷新以后,右击某张表或者库,发现里面的表全部消失了 或者查询不到. 这是因为 sql进程死锁,资源被抢占,要解决这个问题,得杀死关闭 死锁的进程,下面介绍解决方案: 杀死进程的前提是找到 那个死锁的进程 , SELECT blocking_session_id '阻塞进程的ID', wait_duration_ms '等待时间(毫秒)', session_id '(会话ID)'

iOS 8:【转】AFNetworking 2.0

源地址:http://nshipster.cn/afnetworking-2/ AFNetworking 是当前 iOS 和 OS X 开发中最广泛使用的开源项目之一.它帮助了成千上万叫好又叫座的应用,也为其它出色的开源库提供了基础.这个项目是社区里最活跃.最有影响力的项目之一,拥有 8700 个 star.2200 个 fork 和 130 名贡献者. 从各方面来看,AFNetworking 几乎已经成为主流. 但你有没有听说过它的新版呢? AFNetworking 2.0. 这一周的 NSH

AFNetworking 3.0源码阅读 - AFURLSessionManager

这次来说一下AFURLSessionManager 从头文件的英文注释可以看出AFURLSessionManager类创建并管理着NSURLSession对象,而NSURLSession又是基于NSURLSessionConfiguration的.同时该类也是AFHTTPSessionManager的父类,下一篇来讲. AFURLSessionManager实现了四个协议 1.NSURLSessionDelegate URLSession:didBecomeInvalidWithError: U

AFNetworking 3.0迁移指南

AFNetworking是一款在OS X和iOS下都令人喜爱的网络库.为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持.如果你的项目以前使用过这些API,建议您立即升级到基于 NSURLSession 的API的AFNetworking的版本.本指南将引导您完成这个过程. 本指南是为了引导使用AFNetworking 2.x升级到最新的版本API,以达到过渡的目的,并且解释了新增和更改的设计结构. 新设备要求: iO

AFNetworking 2.0 新特性讲解之AFHTTPSessionManager

AFNetworking 2.0 新特性讲解之AFHTTPSessionManager (2014-02-17 11:56:24) 转载▼     AFNetworking 2.0 相比1.0 API 接口改动还是很大的. 其中一个便是 AFURLSessionManager,当然如果你不太熟悉,或者为了兼容低版本,你依然可以选择AFHTTPRequestOperationManager,AFURLSessionManager是基于 NSURLSessionConfiguration(IOS 7