使用YLBModule庫(kù):
pod 'YLBModule', :git => 'https://github.com/ProBobo/YLBModule.git'
YLBModule庫(kù)地址:https://github.com/ProBobo/YLBModule满葛。
YLBModule庫(kù)其實(shí)分為兩部分:模塊注冊(cè)和服務(wù)注冊(cè)妆丘。
模塊注冊(cè):是為了能在模塊中做一些初始化操作篮绰。比如一些第三方SDK的初始化跋核。
服務(wù)注冊(cè):是為了能調(diào)用模塊辙诞,進(jìn)行模塊通信。
一易核、模塊注冊(cè)
模塊設(shè)置
1遏弱、創(chuàng)建模塊類文件(.h和.m文件),一般命名規(guī)則為模塊名稱+AppDelegate弦蹂。這里的模塊類為YLBDesignAppDelegate肩碟。
2、模塊類添加YLBModuleProtocol協(xié)議
為什么要添加YLBModuleProtocol協(xié)議凸椿?
因?yàn)樘砑覻LBModuleProtocol協(xié)議以后才能實(shí)現(xiàn)didFinishLaunchingWithOptions方法削祈。
@interface YLBDesignAppDelegate ()<YLBModuleProtocol>
@end
3、將當(dāng)前類注冊(cè)為模塊
+ (void)load {
//注冊(cè)模塊
[[YLBModuleManager sharedInstance] registerModuleClass:[self class]];
}
4脑漫、設(shè)置模塊加載優(yōu)先級(jí)(加載的先后順序)
- (NSInteger)ylb_modulePriority {
return 1000;//不同的模塊返回的值可以不同髓抑,數(shù)值越小越先加載
}
5、實(shí)現(xiàn)didFinishLaunchingWithOptions方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 可以設(shè)置根視圖等操作
return YES;
}
主工程設(shè)置
主工程的AppDelegate繼承YLBAppDelegate類优幸,并在didFinishLaunchingWithOptions方法中調(diào)用父類的didFinishLaunchingWithOptions方法吨拍,即YLBAppDelegate的didFinishLaunchingWithOptions方法。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
//調(diào)用 YLBAppDelegate 中 didFinishLaunchingWithOptions 方法從而調(diào)用 YLBModuleManager 的 didFinishLaunchingWithOptions 的方法
//開(kāi)始加載模塊
[super application:application didFinishLaunchingWithOptions:launchOptions];
return YES;
}
這樣模塊就可以成功加載网杆。
二羹饰、服務(wù)注冊(cè):模塊通信
服務(wù)注冊(cè)的功能更為全面。模塊注冊(cè)能實(shí)現(xiàn)的效果碳却,服務(wù)注冊(cè)都能做到队秩,模塊注冊(cè)不能實(shí)現(xiàn)的功能,服務(wù)注冊(cè)都也能做到昼浦。
1馍资、創(chuàng)建服務(wù)協(xié)議
服務(wù)協(xié)議放在單獨(dú)的Pod庫(kù)里面,可以參看YLBDesign庫(kù)(https://github.com/ProBobo/YLBDesign)关噪。
YLBDesign(https://github.com/ProBobo/YLBDesign)的服務(wù)協(xié)議放在Pod庫(kù)YLBDServices中鸟蟹。
以YLBDHome和YLBDServices為例物舒,我們說(shuō)明一下如何創(chuàng)建一個(gè)協(xié)議庫(kù)。
其中YLBDHome為模塊庫(kù)戏锹,YLBDServices為協(xié)議庫(kù)。
1.1火诸、創(chuàng)建協(xié)議庫(kù)
使用pod lib create YLBDServices指令創(chuàng)建YLBDServices庫(kù)锦针。
1.2、在協(xié)議庫(kù)YLBDServices中創(chuàng)建協(xié)議文件YLBDHomeProtocol置蜀。
1.3奈搜、在需要使用協(xié)議的模塊中添加Pod依賴庫(kù)YLBDServices。
在Podfile文件中添加依賴
# 架構(gòu)服務(wù)組件:屬于YLBModule需要注冊(cè)的協(xié)議
pod 'YLBDServices', :git => 'https://github.com/YuliboTeam/YLBDServices.git'
在.podspec文件中添加依賴
s.dependency 'YLBDServices' # 用于YLBModule組件的協(xié)議注冊(cè)
1.4盯荤、注冊(cè)協(xié)議
#import <YLBDServices/YLBDHomeProtocol.h>
+ (void)load {
//注冊(cè)服務(wù)
[[YLBServiceManager sharedInstance] registerService:@protocol(YLBDHomeProtocol) implClass:NSClassFromString(@"YLBDHomeController")];
}
1.5馋吗、通過(guò)協(xié)議YLBDHomeProtocol獲取實(shí)現(xiàn)協(xié)議的類YLBDHomeController
id<YLBDHomeProtocol> homeVC = [[YLBServiceManager sharedInstance] createService:@protocol(YLBDHomeProtocol)];
2、模塊通信:消息回傳/消息回調(diào)
當(dāng)模塊A調(diào)用模塊B的時(shí)候秋秤,我們通過(guò)registerService方法實(shí)現(xiàn)宏粤。
但是出現(xiàn)異步回調(diào)時(shí),我們需要在模塊B中把消息傳送給模塊A灼卢。
以YLBDDetail和YLBDServices為例绍哎,我們說(shuō)明一下如何實(shí)現(xiàn)模塊消息回傳。
2.1鞋真、注冊(cè)協(xié)議
[[YLBServiceManager sharedInstance] impService:@protocol(YLBDDetailImpProtocol) target:self];
2.2崇堰、實(shí)現(xiàn)協(xié)議
#pragma mark - 實(shí)現(xiàn)YLBDDetailImpProtocol協(xié)議
- (void)ylb_impProtocol {
NSMutableArray *targetArray = [[YLBServiceManager sharedInstance] impOfProtocol:@protocol(YLBDDetailImpProtocol)];
for (int i = 0; i < targetArray.count; i++) {
id<YLBDDetailImpProtocol> ylbdDetail = [targetArray objectAtIndex:i];
if ([ylbdDetail respondsToSelector:@selector(impFromDetail:)]) {
NSDictionary *dict = @{
@"moduleName":YLB_PROTECT_STR(self.moduleName),
};
[ylbdDetail impFromDetail:dict];
}
}
}
YLBModule源碼說(shuō)明
模塊注冊(cè)
registerModuleClass方法通過(guò)數(shù)組moduleArray存儲(chǔ)模塊類,再對(duì)moduleArray通過(guò)優(yōu)先級(jí)ylb_modulePriority進(jìn)行升序排序涩咖。
服務(wù)注冊(cè):模塊通信
registerService方法通過(guò)可變字典totalServiceDic存儲(chǔ)協(xié)議
和類
的對(duì)應(yīng)關(guān)系海诲。
服務(wù)注冊(cè):模塊消息回傳。
impService方法通過(guò)可變字典totalTargetDic建立包含類
的數(shù)組targetArray和協(xié)議的對(duì)應(yīng)關(guān)系檩互。