Commit 8160d8d4 authored by jz's avatar jz

优化GMRouter

parent db494233
......@@ -98,6 +98,13 @@ void removeSelectorToMediator(NSString *clsName);
*
*/
- (id)pushScheme:(NSString *)urlScheme params:(NSDictionary *)params;
/**
* 初始化Map
*
*/
- (void)initializeRouteMap;
@end
NS_ASSUME_NONNULL_END
......@@ -33,28 +33,25 @@ NSString *const GMRouterTargetWeb = @"Target_Web";
static NSMutableDictionary *routeMap = nil;
@implementation GMRouter (gm)
+ (void)initialize {
if (!routeMap) {
routeMap = [[NSMutableDictionary alloc] initWithCapacity:50];
NSArray *arr = @[GMRouterTargetAI, GMRouterTargetBanking, GMRouterTargetCommunity, GMRouterTargetWeb];
for (NSString *clsStr in arr) {
NSDictionary *dict = [self getMethods:clsStr];
[routeMap addEntriesFromDictionary:dict];
}
- (void)initializeRouteMap {
routeMap = [[NSMutableDictionary alloc] initWithCapacity:50];
NSArray *arr = @[GMRouterTargetAI, GMRouterTargetBanking, GMRouterTargetCommunity, GMRouterTargetWeb];
for (NSString *clsStr in arr) {
NSDictionary *dict = [self getMethods:clsStr];
[routeMap addEntriesFromDictionary:dict];
}
}
#pragma mark - 获取类的所有方法
// 获取所有的方法
+ (NSDictionary *)getMethods:(NSString *)clsStr {
- (NSDictionary *)getMethods:(NSString *)clsStr {
Class cls = NSClassFromString(clsStr);
NSRange range = [clsStr rangeOfString:@"Target_"];
NSString *targetValue = [clsStr substringFromIndex:range.length];
if (!targetValue.length) {
return @{};
}
NSObject *target = [[cls alloc] init];
NSAssert(targetValue.length != 0, @"Target_后不能为空!请注意Target");
unsigned int count = 0;
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
......@@ -75,6 +72,9 @@ static NSMutableDictionary *routeMap = nil;
}
// 获取方法的参数列表
int arguments = method_getNumberOfArguments(methods[i]);
NSAssert([dict.allKeys containsObject:name], @"Target_后不能为空!请注意Target");
//因为消息发送的时候会有两个默认的参数(消息接受者和方法名),所以需要减去2
dict[name] = targetValue;
}
......
......@@ -6,6 +6,7 @@
//
#import "GMRouter.h"
#import "GMRouter+gm.h"
NSString * const GMRouterParamsKeySwiftTargetModuleName = @"GMRouterParamsKeySwiftTargetModuleName";
......@@ -22,6 +23,7 @@ NSString * const GMRouterParamsKeySwiftTargetModuleName = @"GMRouterParamsKeySwi
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
router = [[GMRouter alloc] init];
[router initializeRouteMap];
});
return router;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment