基於AFNetworking 3.0的取消已發出的網絡請求

通常狀況下主動取消請求的需求不會太多html

除非如下幾種狀況git

1.好比電商應用爲例 請求頻繁,數據量大github

2.對性能的要求比較高api

3.網絡環境比較差安全

當一個用戶打開一個界面 看到的倒是漫長的等待框 這時候用戶極可能退出當前界面 瀏覽其餘界面。再以上幾種狀況下 咱們有必要作網絡資源的控制。當一個請求發送之後,不必等他的結果的時候咱們就應該主動取消請求。網絡

主動取消請求不只節省了網絡資源 ,還能夠避免block引用VC致使的延遲內存釋放問題。如今不少網絡框架都支持這種操做,只要你拿到請求隊列隨時能夠發起/取消請求。爲了操做隊列咱們會VC裏持有隊列,設計角度上每一個須要請求的VC都持有若干個隊列,並且手動的取消請求 顯得特別麻煩。session

我這邊設計的主要思路是:app

經過類別來動態管理請求隊列,避免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 搜北上廣

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

相關文章
相關標籤/搜索