最近項目中出現一個需求.就是有可能要對成百甚至上千條數據進行修改. 但是服務器那邊不愿意提供批量操作的接口. 只能自己實現了. 首先感謝AFNetworking. 因為他.我才能方便的實現這個需求.
先說思路吧. 手機的內存是有限的, 我們如果不顧后果,一次性創建大量的請求發出, 這絕對是會影響性能的. 所以我們要限制請求的最大并發數,同一時間最多只能發送5個或者10個的請求, 某個請求完成了,就繼續發送下個請求.
直接上代碼.先是.h.
首先我們來看看代碼:
name是該工具的名字. 方便在接下來的使用.
代理的作用是當全部任務執行完畢的時候告訴外面.
參數數組是用于發送請求的,可以在創建這個類的時候賦值,或者在之后賦值.
接下來是一個bool.該值決定是否要繼續執行任務.
最后是一個開始任務的方法,通過block執行回調.
然后是.m:
這里有個manager屬性.是用于發送請求的.
然后就是在創建對象的時候調用一個baseSetUp方法,對manager初始化.
接下來就是具體發送請求的方法:
首先判斷是否被cancel了. 是的話.就直接調用代理方法
然后再判斷參數數組的個數是否為0, 如果不是的話,就取出數組的第一個參數, 使用manager發出, 在成功或者失敗的回調里面, 先把參數從數組中移除, 然后通過自身的block把參數告訴外面. 再繼續調用這個方法.
直到最后請求數組已經為空了. 就調用代理方法告訴外界所有任務都已經處理完畢了.
這就是這個工具類的全部了. 但是這個工具也只是實現了同一時間發送一個請求. 請求回來后,無論成功與否,都繼續發送下個請求. 與并發請求還差著十萬八千里呢.
所以我們需要創建一個管理類, 專門管理多個工具.有10個工具,我們就能同時發送10個請求了.
先是.h文件:
屬性的話只有兩個,一個是最大并發數,一個是代理.
然后是創建方法, 還有開始任務,以及取消任務的方法.
代理的話,就是成功,失敗,以及所有任務完畢后的回調.
然后是.m文件:
屬性的話也只有兩個. 一個是用于保存工具的數組,一個是已完成任務的個數.
然后是方法, 重寫了最大并發數的set方法.
然后是開始任務的時候,需要給工具派發任務. 派發任務是把請求的個數平分. 當然,最后一個工具的任務不一定平均數,需要特殊處理.
派發完畢之后,就遍歷工具數組, 依次發起請求.我們再通過回調告訴外界.
然后是取消任務的方法,也是遍歷,設置工具的cacel屬性為yes就可以了.
最后.當某個工具任務執行完畢后,就會調用工具的完成任務的回調方法. 在這里,我們做個判斷. 當全部執行完畢后, 再告訴外界就可以了.
github上demo的地址:https://github.com/byljbdh/ALNMultipleNetworkTool
以上.