(O) 介紹文件
每個(gè)組件姻报,涉及三個(gè)文件:MGJRouter
、MainModuleRouter
迎瞧、MainModuleAPI
MGJRouter:核心文件夸溶,通過url注冊(cè)服務(wù)、通過url獲取服務(wù)——(不用動(dòng))凶硅;
MainModuleRouter:只有一個(gè)+load方法缝裁,注冊(cè)所需要的服務(wù)——(這是開發(fā)者要自己寫);
MainModuleAPI:統(tǒng)一披露API的文件足绅,MainModuleRouter通過這個(gè)文件來實(shí)現(xiàn)邏輯——(需要開發(fā)者去搜集這個(gè)組件中捷绑,所有要對(duì)外公布的api及實(shí)現(xiàn))。
(一) 使用流程
1氢妈、注冊(cè)u(píng)rl——時(shí)間:在類加載的時(shí)候
2粹污、使用服務(wù) —— 在任何地方,只要注冊(cè)過
3首量、注冊(cè)點(diǎn)擊事件
在MainModuleRouter類的load方法中給點(diǎn)擊事件賦值一個(gè)打開服務(wù)的block(所謂內(nèi)部open)
在AppDelegate的啟動(dòng)方法中壮吩,注冊(cè)u(píng)rl對(duì)應(yīng)的block服務(wù),外部提供服務(wù)(經(jīng)嘗試加缘,寫在MainModuleRouter類的load方法中也可以的)
外界向內(nèi)部提供服務(wù)(但個(gè)人覺得無需這樣鸭叙,注冊(cè)和賦值打開服務(wù)都可以寫在MainModuleRouter的load方法中,一樣有效)拣宏。
(二) 原理:注冊(cè)和打開服務(wù)
一沈贝、注冊(cè)
1、MainModuleRouter中調(diào)用MGJRouter開始注冊(cè)勋乾,傳入url和block的具體實(shí)現(xiàn)
2宋下、MGJRouter:該類的單例添加url及對(duì)應(yīng)的handler
3嗡善、MGJRouter:url轉(zhuǎn)換成對(duì)應(yīng)的字典(表),并用該字典保存handler
4学歧、MGJRouter:url生成多層key字典(表)的具體方法
5滤奈、MGJRouter:url分解,成三部分撩满,其中 ://
用 ~
代替
二、打開服務(wù)
1绅你、獲取對(duì)象
1.1 在AppDelegate中用MGJRouter獲取對(duì)象
2伺帘、獲取服務(wù)
2.1 調(diào)用服務(wù)
在MainModuleRouter.m中的+load方法中,用MGJRouter注冊(cè)服務(wù)忌锯,最后是保存在了MGJRouter類中的一個(gè)屬性中——可變字典routes
伪嫁。
[MGJRouter registerURLPattern:@"lf://getRootVC" toObjectHandler:^id(NSDictionary *routerParameters) {
return [MainModuleAPI rootTabBarCcontroller];
}];
1.其他地方用MGJRouter通過url,獲取服務(wù)偶垮,框架在維護(hù)一個(gè)url-block的表格张咳。
[MGJRouter openURL:@"lf://playAudio" withUserInfo:@{
@"isPlaying": @(isPlaying)
} completion:nil];
通過MGJRouter來獲取對(duì)象;
通過MGJRouter來來執(zhí)行方法(方法名是字符串形式)似舵;
特點(diǎn):
- 每個(gè)業(yè)務(wù)組件, 都需要依賴這個(gè)框架脚猾;
- url維護(hù)成本高;硬解碼砚哗;
- 可以在組件內(nèi)部任何地方調(diào)用/注冊(cè)服務(wù), 沒有必要統(tǒng)一組件接口服務(wù)龙助。
MGJouter
是在維護(hù)一個(gè)表;
就一個(gè)類蛛芥;
單例提鸟,因?yàn)槭枪灿茫?/p>
MGJouter使用順序:以XMGFMMain為例
外界使用:在Appdelegate文件中,通過MGJRouter中間件調(diào)用方法——添加子控件仅淑,并傳入?yún)?shù)称勋。
調(diào)用過程:在MGJRouter.m中觸發(fā)block,調(diào)用MainModuleRouter.m中的一個(gè)block:
XMGFMMain內(nèi)部registerURL涯竟,讓外界提供代碼塊(即外界告訴內(nèi)部要做什么)及參數(shù)信息赡鲜。
~遇到了坑:
1、宿主工程做中間件庐船,
pod '某框架'
導(dǎo)入頭文件蝗蛙,編譯,報(bào)錯(cuò):找不到該框架的頭文件醉鳖。
~MGJRouter的思考
內(nèi)部register捡硅,讓外界調(diào)用,向內(nèi)部提供參數(shù)(即字典和代碼塊)盗棵,根據(jù)這些參數(shù)做事壮韭;block中會(huì)攜帶參數(shù)給外界北发。
外部open,填入字典參數(shù)和代碼塊喷屋,傳給內(nèi)部琳拨。