標籤:
大學時曾經做過android的開發,目前的工作是iOS的開發。之前自己記錄東西都是通過自己比較喜歡的筆記類的應用記錄下了。直到前段時一個哥們拉著我註冊了一個部落格。現在終於想明白了,部落格這個東西受眾會稍微廣泛一些,自己寫的比較粗爛的東西可以得到大家的指正,可能有一點點比較好的東西可以給大家提供一個思路,有交流才會有更大的進步嘛。廢話不多說了。
首先多人開發我還是比較傾向於使用XIB的,因為SB的多人開發並不是很方便。XIB又比純程式碼布局介面更加直觀,雖然有的時候我也會使用Masonry布局,但基本都是業務需要的時候。所以controller的解藕就變的比較重要了,push到下一個下一個controller的時候就不用非得import下一個controller類了,讓多人合作的的時候不用過多的import,當然大量import會加大系統資源的開銷,還會造成後期項目的維護性變差。下面我將結合正在工作項目和自己的心得寫寫。
我就結合工程的代碼介紹一下吧,文章最後會貼上My Code地址。
YRouterNavigationController是繼承的系統的UINavigationController。主要的就是在AppDelegate裡面實現把controller儲存到config數組(此數組主要的功能是讓唯一的URL和controller的名字一一對應),以便pop的時候去檢查,並形成統一的風格。設定rootcontroller,push,pop,present等的就不再介紹了(push,pop,present的時候用的NSURL,可能不是很方便,大家可以在我的上面封裝一個方法把str轉換成url就可以啦)。基本上都是對系統方法的一個封裝。我感覺找到解藕的最核心的是OC的runtime有這麼一個方法——NSClassFromString,哈哈
UIViewController+YRouterUIViewControllerCategory是一個UIViewController的Category。為什麼要使用Category呢?主要是考慮到還有tableviewcontroller等的controller,tableviewcontroller也是uiviewcontroller的一個子類嘛。這樣大家就都具有了本Category的技能了。另外push或者present的時候可以帶一個字典的參數,這個參數是query的dic,其實本質上穿參數還是用的KVC,只不過相當於把controller和參數做了一個綁定,就沒有藕合度那麼高的KVC了。這個穿參的query實際使用到了objc_setAssociatedObject和objc_getAssociatedObject,哈哈沒有接觸過的同學自行google。啊,還有,controller預設設定了leftBarButtonItem(作為pop的返回),如果用不到的時候,請自行設定其為nil。
代碼地址:https://coding.net/u/ysk/p/YRouter/git
先寫這麼多吧。這個方案可能還會有很多不足之處,如果你參考了本方案,發現了不足,務必在下面評論告訴我,多謝啦。
iOS controller解藕探究實現——第一次寫部落格