基於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 搜北上廣

[北上廣]-獻給專注實現夢想的你

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM