通常狀況下主動取消請求的需求不會太多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]; }
下面是類別方法
下面來看下 取消請求的代碼段
我這邊是用runtime 再一個VC消失的時候觸發了取消請求操做
//類別方法取消請求
操做runtime 用了開源
這只是思路 字典的存取沒作線程安全控制 能夠改進不少地方
若是不是每個VC都有這種需求,能夠經過維護特定的VC列表來 避免全部的VC作判斷。
如今看來咱們每一個VC 沒有作額外的工做 只是添加刪除隊列 就能夠完成界面消失的時候自動取消請求的需求。
==============推廣=================
我有故事你有酒嗎?
我有酒 ,並且只有酒 ,由於我窮得只剩酒。
北上廣裏有故事,有夢想,有愛情 ,有八卦,有生活。
來[北上廣]聽聽他們的故事吧
下載IOS版本:http://7x2x43.com1.z0.glb.clouddn.com/bsgwbtt.html
或者appStore 搜北上廣
[北上廣]-獻給專一實現夢想的你