前言:
在之前的文章中梳侨,我有介紹過.a和 .framework 的封裝,算是為你的組件模塊打個基礎(chǔ)吧添坊。當你將你的功能塊封裝后使用起來是不是很方便呢太伊。那么在開發(fā)過程中雇锡,你是否有遇到過這樣的情況:不論是方法的調(diào)用、數(shù)據(jù)的傳參僚焦,相同的方法或者相同的參數(shù)塊在多處調(diào)用锰提,而給你的項目帶來了過多的冗余。那么你是否想過如何減少你項目的耦合問題呢芳悲?
舉個簡單的例子吧立肘,比如:你有一個對象,這個對象你需在多個控制器或者view中調(diào)用名扛,最常見到的就是地圖的定位了吧谅年。那么你之前一定有使用過單例霍弹,這個就是一個很好的解決方法或杠。那么控制器呢,相同問題當你的控制器需要在整個項目中作為一個“單例”呢乍狐?
在開發(fā)過程中弄企,model的概念大家一定很熟悉超燃,一個參數(shù)攜帶者-對象。如果你對你的項目內(nèi)存有極高的強迫癥的話桩蓉,你也許像我一樣這么做過:平時的項目中淋纲,請求的數(shù)據(jù)量級并不大,使你覺得沒有必要去做一個model院究,而是直接在你的控制器中洽瞬,對取得的數(shù)據(jù)進行了處理。(其實业汰,也和習慣有關(guān)系吧伙窃,哈哈。)那么样漆,當數(shù)據(jù)量大到你頭疼的時候为障,model就是必不可少的了,常用mjExcetion的人應該會有體會放祟。model的使用鳍怨,每個開發(fā)人員都再熟悉不過了,可是你有仔細想過它嗎跪妥?你是否在MVC的模式中鞋喇,從未走出過呢?你的首頁MVC中的model眉撵,有沒有想過也放到其它的地方去呢侦香?不錯,你首頁的modle它只是一個數(shù)據(jù)攜帶者纽疟,一個object而已罐韩。那么,不論你將它導入到哪里污朽,當它攜帶了你需要的參數(shù)時散吵,它就是你需要的對象。
講到這里蟆肆,我覺得可以開始今天的正文了:組件模塊化错蝴。關(guān)于iOS模塊化開發(fā)的文章有很多,大概有3個方案:
- Protocol注冊方案
- URL注冊方案
- Target-Action runtime調(diào)用方案
對于1和2中的方案颓芭,大家可以自己去查查吧顷锰。我也是看了他人的文章的,自覺還不夠拿來說的亡问」僮希可以給大家推薦一篇吧,附帶demo的感覺不錯州藕。(http://www.reibang.com/p/2cb4cc8d216e)
至于第3個方案束世,倒是恰好有在項目中接觸到,將個人的一些經(jīng)驗和理解講出來吧床玻。即作為個人的筆記毁涉,也供大家查看。
本文主要以CTMediator來講解锈死。
一:模塊化開發(fā)理解
1.作用:
如果你的項目中有一個首頁控制器HomeVC贫堰,當你在一個子控制器(例如穆壕,訂單詳情控制器)中,需要調(diào)用它時其屏,通常的做法是直接將HomeVC import進來喇勋,然后調(diào)用≠诵校可是當我們的項目中有大量的HomeVC導入時川背,耦合太高。那么有什么方法可以簡潔化呢蛤袒?CTMediator熄云。
2.CTMediator可以看作是一個target+action的對象,將你要處理的對象打標簽妙真、加動作缴允,然然后通過Runtime處理,來達到降低耦合的目的隐孽。如果你將它看作一個model癌椿,那么它就是一個打了tag加了action的參數(shù)攜帶者,而它的處理過程中的每條映射都可以看作是一條路由菱阵。
二:實施:
1.將CTMediator導入項目中踢俄,然后新建一個控制器RouteVC(會被多處調(diào)用);
2.創(chuàng)建Target_xxx對象晴及,并設(shè)置傳值方法Action_xxx都办;
3.創(chuàng)建CTMediator的類目,構(gòu)建路由虑稼,創(chuàng)建實現(xiàn)路由的方法琳钉;
4.在需要調(diào)用RouteVC的控制器中,導入3中的類目蛛倦,使用CTMediator的路由方法歌懒。
具體步驟,和詳細解釋溯壶,可以查看demo及皂。