AppDelegate解耦

方案一:FRDModuleManager

FRDModuleManager 提供了一個統一的接口,讓各模塊知曉應用的生命週期。在 AppDelegate 中留下鉤子,在特定的生命週期調用模塊的對應方法。這樣將使得 AppDelegate 更簡單。對於應用生命週期的使用也更清晰。 evernotecid://6F55E44D-BBC1-43F1-9310-4138A0D19764/appyinxiangcom/11652118/ENResource/p18418 git

使用:參考github文檔

優勢:

  • 一、簡單,只須要幾行代碼就能夠解決。
  • 二、被添加的每一個模塊均可以「享受」AppDelegate的各個生命週期。

缺點:

  • 一、每一個模塊都要初始化並分配內存,當FRDModuleManager裏註冊了大量模塊時,會建立大量對象並影響App啓動速度。
  • 二、缺乏模塊初始化優先級,當有三個模塊A,B,C時,正好C依賴於B,B依賴於A,若是在配置文件中配置A,B,C的順序又是打亂時,初始化會出問題。

其實第2個缺點是能夠避免的,咱們能夠調整plist文件中的類的順序,來實現模塊的調用順序。咱們拿FRDModuleManager的demo中的plist文件來驗證一下。github

順序一:FRDGroupModule在上面

對應下面的調用日誌

順序二:FRDGroupModule在下面

對應下面的調用日誌

方案二:JSDecoupledAppDelegate

JSDecoupledAppDelegate是由JSBadgeView的做者開發的一款輕量級的AppDelegate解耦工具。它將AppDelegate各個功能點獨立出來,並經過代理的方式將控制權下發。實現原理,利用Objective-C的消息轉發機制,轉發AppDelegate的各個方法來實現AppDelegate的解耦的app

使用:參考github文檔

優勢:

  • 一、JSDecoupledAppDelegate自己對於AppDelegate各個功能的拆分對咱們理解AppDelegate有必定幫助——AppDelegate確實承載了太多的功能。
  • 二、因爲各個子代理對象的執行順序是肯定的,所以基本能夠解決FRDModuleManager中相互依賴的問題。

缺點:

JSDecoupledAppDelegate的缺點很是明顯:使用它必須廢棄原生的AppDelegate,所以咱們不能經過((AppDelegate *)[UIApplication sharedApplication].delegate).window來獲取window,以及window的rootViewController。工具

方案三:AppDelegate分類(Category)

優勢:

不須要添加任何三方庫,咱們就能夠給AppDelegate添加不少方法,而且能輕鬆控制方法的執行順序3d

缺點:

添加新的屬性比較繁瑣,只能經過runtime或者BlocksKit等三方庫實現代理

參考: DelegateDietDemo日誌

相關文章
相關標籤/搜索