iOS 組件化構(gòu)思

一凫碌、iOS 組件化常用方式討論

使用openURL進(jìn)行組件的注冊和調(diào)用

  1. App 啟動(dòng)時(shí)實(shí)例化各組件模塊,然后這些組件向 ModuleManager 注冊 URL 胃榕,有些時(shí)候不需要實(shí)例化盛险,使用 class 注冊。
  2. 當(dāng)組件A需要調(diào)用組件B時(shí),向 ModuleManager 傳遞 URL 苦掘,參數(shù)跟隨 URL 以 GET 方式傳遞换帜,類似openURL 。然后由 ModuleManager 負(fù)責(zé)調(diào)度組件B鹤啡,最后完成任務(wù)惯驼。

方案分析

第一步的問題,在組件化的過程中揉忘,注冊 URL 并不是充分必要條件跳座,組件是不需要向組件管理器注冊Url的。而且注冊了 URL 之后泣矛,會(huì)造成不必要的內(nèi)存常駐疲眷,如果只是注冊Class,內(nèi)存常駐量就小一點(diǎn)您朽,如果是注冊實(shí)例狂丝,內(nèi)存常駐量就大了。
第二步哗总。在 iOS 領(lǐng)域里几颜,一定是組件化的中間件為 openURL 提供服務(wù),而不是 openURL 方式為組件化提供服務(wù)讯屈。
問題在于無法表達(dá)非常規(guī)對象蛋哭。
如果是傳遞復(fù)雜對象,如 UIImage 涮母,只能做如下表達(dá)

[a openUrl:@"http://baidu.com/detail" 
    params:@{
        @"id":"abc123",
        @"type":"1",
        @"image":[UIImage imageNamed:@"iOSImage"]}
]

如果不像上面這么做谆趾,復(fù)雜參數(shù)和非常規(guī)參數(shù)就無法傳遞。如果這么做了叛本,那么事實(shí)上這就是拆分遠(yuǎn)程調(diào)用和本地調(diào)用的入口了沪蓬。
URL 注冊對于實(shí)施組件化方案是不必要的,且通過 URL 注冊的方式形成的組件化方案来候,拓展性和可維護(hù)性都會(huì)被打折跷叉。
注冊 URL 的目的其實(shí)是一個(gè)服務(wù)發(fā)現(xiàn)的過程,在 iOS 領(lǐng)域中营搅,服務(wù)發(fā)現(xiàn)的方式是不需要通過主動(dòng)注冊的云挟,使用 runtime 就可以了。另外转质,注冊部分的代碼的維護(hù)是一個(gè)相對麻煩的事情植锉,每一次支持新調(diào)用時(shí),都要去維護(hù)一次注冊列表峭拘。如果有調(diào)用被棄用了,是經(jīng)常會(huì)忘記刪項(xiàng)目的。runtime 由于不存在注冊過程鸡挠,那就也不會(huì)產(chǎn)生維護(hù)的操作辉饱,維護(hù)成本就降低了。

二拣展、對組件化的構(gòu)思

iShot2021-10-25 16.36.21.png

以上方式主要是基于 Mediator 模式和 Target-Action 模式彭沼,中間采用了 Runtime 來完成調(diào)用。這套組件化方案將遠(yuǎn)程應(yīng)用調(diào)用和本地應(yīng)用調(diào)用做了拆分备埃,而且是由本地應(yīng)用調(diào)用為遠(yuǎn)程應(yīng)用調(diào)用提供服務(wù)姓惑,與常用方案正好相反。

調(diào)用方式

先說本地應(yīng)用調(diào)用按脚,本地組件A在某處調(diào)用
[[Mediator sharedInstance] performTarget:targetName action:actionName params:@{...}]
向 Mediator 發(fā)起跨組件調(diào)用于毙,Mediator 根據(jù)獲得的 target 和 action 信息,通過 Objective-C 的 runtime 轉(zhuǎn)化生成 target 實(shí)例以及對應(yīng)的 action 選擇子辅搬,然后最終調(diào)用到目標(biāo)業(yè)務(wù)提供的邏輯唯沮,完成需求。

在遠(yuǎn)程應(yīng)用調(diào)用中堪遂,遠(yuǎn)程應(yīng)用通過 openURL 的方式介蛉,由iOS系統(tǒng)根據(jù) info.plist 里的 scheme 配置找到可以響應(yīng) URL 的應(yīng)用,應(yīng)用通過 AppDelegate 接收到URL之后溶褪,調(diào)用 Mediator 的 openUrl: 方法將接收到的URL信息傳入币旧。當(dāng)然, Mediator 也可以用 openUrl:options: 的方式順便把隨之而來的option 也接收猿妈,這取決于你本地業(yè)務(wù)執(zhí)行邏輯時(shí)的充要條件是否包含 option 數(shù)據(jù)吹菱。傳入 URL 之后,Mediator 通過解析 URL 于游,將請求路由到對應(yīng)的 target 和 action 毁葱,隨后的過程就變成了上面說過的本地應(yīng)用調(diào)用的過程了,最終完成響應(yīng)贰剥。

以上是針對 iOS 組件化的初步構(gòu)思倾剿,關(guān)于更多詳細(xì)內(nèi)容后續(xù)會(huì)繼續(xù)分析。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蚌成,一起剝皮案震驚了整個(gè)濱河市前痘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌担忧,老刑警劉巖芹缔,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)只磷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門跷坝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凹蜂,“玉大人泻蚊,你說我怎么就攤上這事荆虱∠扔” “怎么了拌阴?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵绍绘,是天一觀的道長。 經(jīng)常有香客問我迟赃,道長陪拘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任纤壁,我火速辦了婚禮左刽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘摄乒。我一直安慰自己悠反,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布馍佑。 她就那樣靜靜地躺著斋否,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拭荤。 梳的紋絲不亂的頭發(fā)上茵臭,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機(jī)與錄音舅世,去河邊找鬼旦委。 笑死,一個(gè)胖子當(dāng)著我的面吹牛雏亚,可吹牛的內(nèi)容都是我干的缨硝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼罢低,長吁一口氣:“原來是場噩夢啊……” “哼查辩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起网持,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤宜岛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后功舀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萍倡,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年辟汰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了列敲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阱佛。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖戴而,靈堂內(nèi)的尸體忽然破棺而出瘫絮,到底是詐尸還是另有隱情,我是刑警寧澤填硕,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站鹿鳖,受9級特大地震影響扁眯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜翅帜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一姻檀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涝滴,春花似錦绣版、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至韩脏,卻和暖如春缩麸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赡矢。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工杭朱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吹散。 一個(gè)月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓弧械,卻偏偏與公主長得像,于是被迫代替她去往敵國和親空民。 傳聞我的和親對象是個(gè)殘疾皇子刃唐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容