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中邏輯拆分,每個模塊以微應用的形式獨立存在。”