1. iOS 組件化實(shí)現(xiàn)的一種思路:面向協(xié)議編程
先注冊(cè)一對(duì)一對(duì)的協(xié)議和相應(yīng)實(shí)現(xiàn)類随橘,在需要時(shí)依據(jù)協(xié)議獲取服務(wù)實(shí)例恤磷。適用于一個(gè)協(xié)議只通過(guò)一個(gè)類實(shí)現(xiàn)的功能組件面哼。
通過(guò)兩個(gè)方法實(shí)現(xiàn):
//注冊(cè)
- (void)registerService:(Protocol *)service implClass:(Class)implClass
//獲取
- (id)createService:(Protocol *)service
2. 模塊化開發(fā)
一個(gè)復(fù)雜的app分為若干個(gè)模塊分別維護(hù)開發(fā),在app啟動(dòng)時(shí)每個(gè)模塊自動(dòng)注冊(cè)到BHModuleManager的模塊數(shù)組中扫步。依靠以下實(shí)現(xiàn):
每個(gè)模塊添加宏:
BH_EXPORT_MODULE(isAsync) \
+ (void)load { [BeeHive registerDynamicModule:[self class]]; } \
-(BOOL)async { return [[NSString stringWithUTF8String:#isAsync] boolValue];}
其中異步調(diào)用以下通過(guò)魔策,僅僅需要在dispatch_async(dispatch_get_main_queue(), ^{}中調(diào)用,即可在app啟動(dòng)顯示第一屏后才調(diào)用河胎,簡(jiǎn)單而非常有用的方法闯袒。
if ([moduleInstance respondsToSelector:@selector(async)]) {
BOOL async = [moduleInstance async];
if (async) {
dispatch_async(dispatch_get_main_queue(), ^{
bk();
});
} else {
bk();
}
} else {
bk();
}
將默認(rèn)的AppDelegate改成繼承自BHAppDelegate的子類,然后調(diào)用父類的application_application didFinishLaunchingWithOptions游岳,在app啟動(dòng)后對(duì)各模塊進(jìn)行初始化等操作政敢。在此之前,將application的相關(guān)信息存入BHContext.shareInstance中胚迫。
[[BHModuleManager sharedManager] triggerEvent:BHMSetupEvent];
[[BHModuleManager sharedManager] triggerEvent:BHMInitEvent];
dispatch_async(dispatch_get_main_queue(), ^{
[[BHModuleManager sharedManager] triggerEvent:BHMSplashEvent];
});
各模塊需實(shí)現(xiàn)BHModuleProtocol喷户,以便在BHAppDelegate中實(shí)現(xiàn)模塊對(duì)app生命周期的感知和管理等。
3. 最后引用BeeHive開發(fā)人員的解釋:
“BeeHive核心思想涉及兩個(gè)部分:
各個(gè)模塊間調(diào)用從直接調(diào)用對(duì)應(yīng)模塊访锻,變成調(diào)用Service的形式褪尝,避免了直接依賴闹获。App生命周期的分發(fā),將耦合在AppDelegate中邏輯拆分河哑,每個(gè)模塊以微應(yīng)用的形式獨(dú)立存在避诽。”