BeeHive源碼簡要解析

1. iOS 組件化實現的一種思路:面向協議編程

先注冊一對一對的協議和相應實現類,在需要時依據協議獲取服務實例。適用于一個協議只通過一個類實現的功能組件。
通過兩個方法實現:

 //注冊
 - (void)registerService:(Protocol *)service implClass:(Class)implClass
//獲取
- (id)createService:(Protocol *)service

2. 模塊化開發

一個復雜的app分為若干個模塊分別維護開發,在app啟動時每個模塊自動注冊到BHModuleManager的模塊數組中。依靠以下實現:
每個模塊添加宏:

BH_EXPORT_MODULE(isAsync) \
+ (void)load { [BeeHive registerDynamicModule:[self class]]; } \
 -(BOOL)async { return [[NSString stringWithUTF8String:#isAsync] boolValue];}

其中異步調用以下通過,僅僅需要在dispatch_async(dispatch_get_main_queue(), ^{}中調用,即可在app啟動顯示第一屏后才調用,簡單而非常有用的方法。

    if ([moduleInstance respondsToSelector:@selector(async)]) {
        BOOL async = [moduleInstance async];
        
        if (async) {
            dispatch_async(dispatch_get_main_queue(), ^{
                bk();
            });
            
        } else {
            bk();
        }
    } else {
        bk();
    }

將默認的AppDelegate改成繼承自BHAppDelegate的子類,然后調用父類的application_application didFinishLaunchingWithOptions,在app啟動后對各模塊進行初始化等操作。在此之前,將application的相關信息存入BHContext.shareInstance中。

    [[BHModuleManager sharedManager] triggerEvent:BHMSetupEvent];
[[BHModuleManager sharedManager] triggerEvent:BHMInitEvent];

dispatch_async(dispatch_get_main_queue(), ^{
    [[BHModuleManager sharedManager] triggerEvent:BHMSplashEvent];
});

各模塊需實現BHModuleProtocol,以便在BHAppDelegate中實現模塊對app生命周期的感知和管理等。

3. 最后引用BeeHive開發人員的解釋:

“BeeHive核心思想涉及兩個部分:
各個模塊間調用從直接調用對應模塊,變成調用Service的形式,避免了直接依賴。App生命周期的分發,將耦合在AppDelegate中邏輯拆分,每個模塊以微應用的形式獨立存在。”

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,284評論 25 708
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,232評論 4 61
  • 很明顯,這是在向左老板致敬。左老板,我愛你。 《一把愛情的槍》 我獨自一人走在海邊, 望著海面點燃了一根煙。 平靜...
    九五乾謙閱讀 1,009評論 6 18
  • 1)今天早上,349路來得比平時更緩一些。擠上公交才發現,一車的老爺爺老奶奶。坐著的人都過了讓座的年紀。還有一個老...
    安的烈閱讀 423評論 0 0