ios开发循环网络请求_谈谈 iOS 网络层设计(SSJNetWork封装缓冲,log日志,自动取消网络请求)...
2.delegate效率高,delegate只是保存了一個(gè)對(duì)象指針3.在多個(gè)通信事件的時(shí)候,delegate顯得直觀也易維護(hù)。
delegate缺點(diǎn):1.因方法的聲明和實(shí)現(xiàn)分離開來,代碼的連貫性不是很好,沒有 block 好讀
2.很多時(shí)候需要存儲(chǔ)一些臨時(shí)數(shù)據(jù)
------------
筆者崇尚于更輕型,更簡(jiǎn)單,更連貫的代碼,所以筆者在封裝SJNetwork的時(shí)候采用的是Block,佛家云:有所舍,才能有所得。
indulge_in?大神?認(rèn)為CTNetworking 不足:
使用 IOP 方式建立模塊,化繼承為組合。獨(dú)立和等協(xié)議作為集約管理部分,若個(gè)別接口需要修改這些公共配置,只能在集約管理模塊來判斷,顯得有一點(diǎn)繁瑣。
記錄了一個(gè) request 實(shí)例的所有 task,在 dealloc 中自動(dòng)取消掉還未降落的網(wǎng)絡(luò)請(qǐng)求,但是實(shí)際上網(wǎng)絡(luò)請(qǐng)求任務(wù)會(huì)持有 request,所以自動(dòng)取消策略不成立了。
YTKNetwork 不足:
基于多態(tài)的設(shè)計(jì)思路,提供了很多供重載的方法,從設(shè)計(jì)來看,框架是可以實(shí)例化YTKBaseRequest子類 直接使用的,那么直接使用時(shí)無法重載這些方法專門定制(個(gè)人看來有些地方使用屬性更靈活);并且,當(dāng)一個(gè) reqeust 多次start發(fā)起請(qǐng)求就會(huì)調(diào)用多次這些重載方法,可能造成多余計(jì)算;
緩存策略使用一個(gè)YTKBaseRequest的子類YTKRequest來做,雖然這樣看起來比較優(yōu)雅,父類和子類各司其職,單一職責(zé),但是緩存策略難免會(huì)更改父類的邏輯,如此就很難不違背開閉原則。框架的緩存只有一個(gè)失效時(shí)間控制,筆者想要拓展時(shí)發(fā)現(xiàn)要改的東西太多。
同一個(gè) request 實(shí)例多次 start 調(diào)用網(wǎng)絡(luò)請(qǐng)求時(shí) (多個(gè)網(wǎng)絡(luò)請(qǐng)求并發(fā)情況),并未作出實(shí)際的處理策略,僅保留最新的NSURLSessionTask,而對(duì)舊的未結(jié)束的所有NSURLSessionTask喪失了控制權(quán)。
網(wǎng)絡(luò)請(qǐng)求任務(wù)強(qiáng)持有所有 request 對(duì)象,在弱網(wǎng)環(huán)境下可能會(huì)有大量 request 對(duì)象無法釋放,而界面降落點(diǎn)可能不存在了。
CTNetworking
可讀性比YTKNetwork好
CTJsbridge已經(jīng)可以跟CTNetworking交互,H5工程師可以很方便地使用基于CTNetworking的網(wǎng)絡(luò)API。
各種錯(cuò)誤錯(cuò)誤類型回調(diào)比較全
YTKNetwork
可能是使用了命令模式的原因吧,我覺的YTKNetwork的可讀性不如CTNetworking 個(gè)人覺的不管用什么設(shè)計(jì)模式,為的是代碼邏輯更加明確,代碼更加易懂易讀,如有不認(rèn)同筆者的,請(qǐng)忽略,畢竟人生百味,請(qǐng)?jiān)试S我有百想,
YTKNetwork和CTNetworking的日志輸出,緩沖,取消網(wǎng)絡(luò)請(qǐng)求,當(dāng)我們使用的時(shí)候還的進(jìn)行網(wǎng)絡(luò)的三次封裝,筆者認(rèn)為,一個(gè)網(wǎng)絡(luò)層設(shè)計(jì),應(yīng)該是都封裝進(jìn)去,然后提供開發(fā)人員調(diào)用就可以了,
SSJNetWork封裝緩沖,日志,自動(dòng)網(wǎng)絡(luò)請(qǐng)求。
1.緩存處理
緩存處理配置都在SJNetWorkConfig和SJNetworkRequestConfig類中,支持以下配置:- 內(nèi)存/磁盤存儲(chǔ)方式
- 緩存的有效時(shí)長(zhǎng)
- 根據(jù)請(qǐng)求shouldAllIgnoreCache判斷是否需要緩存
- 以及直接配置 YYCache
- 支持緩沖最大數(shù)量(采用YYCache LRU算法)
- 緩存的版本
2. 自動(dòng)取消網(wǎng)絡(luò)請(qǐng)求
采用AOP hook方式自動(dòng)取消網(wǎng)絡(luò)請(qǐng)求
swizzling_exchangeMethod([self class],@selector(popViewControllerAnimated:), @selector(ssj_popViewControllerAnimated:));
swizzling_exchangeMethod([self class],@selector(popToRootViewControllerAnimated:), @selector(ssj_popToRootViewControllerAnimated:));
swizzling_exchangeMethod([self class],@selector(popToViewController:animated:), @selector(ssj_popToViewController:animated:));
swizzling_exchangeMethod([self class],@selector(dismissViewControllerAnimated:completion:), @selector(ssj_dismissViewControllerAnimated:completion:));
復(fù)制代碼
請(qǐng)配置 SJNetworkRequestConfigz 中 className 如不傳入?yún)?shù)網(wǎng)絡(luò)請(qǐng)求對(duì)應(yīng)vc的className,則自動(dòng)取消網(wǎng)絡(luò)請(qǐng)求無效
自動(dòng)取消網(wǎng)絡(luò)請(qǐng)求根據(jù)的的是,視圖pop和dismiss的時(shí)候取消當(dāng)前VC下所有的網(wǎng)絡(luò)請(qǐng)求設(shè)計(jì)的
3.日志輸出,采用NetworkEye部分代碼可以監(jiān)控App內(nèi)所有HTTP請(qǐng)求并顯示請(qǐng)求相關(guān)的所有信息,方便App開發(fā)的網(wǎng)絡(luò)調(diào)試
SJNetWorkConfig`變量配置,
dubugLogeEnable:請(qǐng)求完成控制臺(tái)直接輸出
SQLLogEnable:記錄在sql提高跳轉(zhuǎn)到vc的時(shí)候展示
ne_sqlitePassword:log日志數(shù)據(jù)庫(kù)密碼
ne_saveRequestMaxCount:保存請(qǐng)求的最大個(gè)數(shù)
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的ios开发循环网络请求_谈谈 iOS 网络层设计(SSJNetWork封装缓冲,log日志,自动取消网络请求)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python编辑用户登录界面_pytho
- 下一篇: java如何读取rfid的数据_100G