網上關於元件化的理論很多而且已經比較成熟,理論方面請參看這篇集合文章ios元件化。
1、要元件化必須進行解耦。
我們談解耦,並不是完全解除**之間的耦合,通過學習和實踐這是不合理也不可能的。我們解耦的目的其實是為了解除**模組相互間的依賴,或者說我們的目的就是讓**模組變得單向依賴,像乙個插頭一樣可以自由拔插。 (合理 不合理的 圖)
2、模組化與解耦理論模組化與解耦
因為個人精力有限,此篇主要是記錄元件化架構的實踐,故這裡只以功能模組劃分元件,模組化可以根據自身專案自己封裝對應模組。
3、元件化架構設計
作為乙個開發者,有乙個學習的氛圍跟乙個交流圈子特別重要,這是乙個我的ios***:642363427不管你是小白還是大牛歡迎入駐 ,分享bat,阿里面試題、面試經驗,討論技術, 大家一起交流學習成長!1、目前業界常見的模組間通訊方案大致如下幾種:
基於路由 url 的 ui 頁面統跳管理(url-block)。 基於反射的遠端介面呼叫封裝(target-action)。 基於面向協議思想的服務註冊方案(protocol-class)。 基於通知的廣播方案(nsnotification)。
可以使用一種或幾種,我這裡選用了基於反射的遠端介面呼叫封裝(target-action)和基於路由 url 的 ui 頁面統跳管理(url-block)來進行封裝。
2、路由的實現:
網上成熟方案很多jlroute就是乙個非常好的路由框架,但是個人感覺jlroute依然比較龐大,功能也不夠單一。因此自己實現了乙個簡單的路由框架ptrouter。
ptrouter,支援了註冊scheme。註冊scheme這一特性,可以更方便的呼叫諸如第方分享,或是統計sdk整合使用。ptrouter,為了實現功能單一性,只擴充了controller跳轉的功能。資料的傳入通過引數傳遞(底層是通過依賴注入實現)。通過block只返回跳轉是否成功,比如開啟設定頁:
[ptrouter openurl:@"" callback:^(bool result)}];
ptrouter 支援同步 & 非同步獲取返回值,其中非同步轉同步內部通過semaphore實現
+ (void)openurl:(nsstring *)url callback:(void (^)(bool result))callback;+ (bool)openurl:(nsstring *)url;
另外openurl除了支援url中帶引數,也支援引數放在字典中- (void)start;本文的元件通過pod 私有庫進行整合。解藕部分還有待改進,後續有時間會繼續修改。IOS開發學習 OC篇
一 instancetype和id關鍵字的區別 1 instancetype表示方法的返回型別和呼叫方法的物件型別相同。2 在object c引入instancetype之前,初始化方法的返回型別都是id,id的定義是 指向任意物件的指標 相當於c語言中的void 它們的區別是 instancety...
iOS開發 OC篇 單例模式
回顧一下load和initialize方法,有幾點需要注意。load方法和initialize方法分析 1 load方法 1 當類被引用程序式的時候會執行這個函式 2 乙個類的load方法不用寫明 super load 父類就會收到呼叫,並且在子類之前。3 category的load也會收到呼叫,但...
IOS 元件化的好處
建立pod索引庫,固定寫法,並且定義索引庫的名字為s,後續通過s,就能拿到索引庫 pod spec.new do s 設定名稱 設定版本號 s.version 0.0.1 設定摘要 設定詳情 s.description good 設定倉庫主頁 設定許可證 s.license mit 設定作者 s.a...