赞
踩
Appdelegate功能我们有太多的业务需要监听生命周期,比如第三方初始化SDK,文件的管理,推送消息,前后台切花,定位,等等。如果我们把Appdelegate很多职责能够拆分到各个模块中去这样我们的Appdelegate更加维护和管理。
基于上述考虑,我们可以采用一种分模块加载的方式加载所有AppDelegate方法,该方式会依次加载各个模块,当主AppDelegate某个方法被调用时,会依次调用各个模块的方法,这样各个模块都存在一套自己的AppDelegate方法,互不干扰,而我们主AppDelegate里面只需要存在相应的调用代码,其余的代码都可以分散在各个工程,从而保持一份稳定且干净的AppDelegate。
第一步:FMDBStartModuleConfig 配置启动的数据
第二步:注册所有的AppDelegate相关的Event Modules
+ (void)load
{
//注册
[[FMDBStartApplicationCenter sharedAppEventCenter] registedAllModules];
}
第三步:在主AppDelegate中分别添加调用方法,这里使用了自己维护的module管理器
例如: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { FMDBStartApplicationCenter *center = [FMDBStartApplicationCenter sharedAppEventCenter]; [center handleApplicationEvent:@"application:didFinishLaunchingWithOptions:" Complete:^(id _Nonnull module, SEL _Nonnull sel) { IMP imp = [module methodForSelector:sel]; void (*func)(id, SEL,UIApplication *,NSDictionary *) = (void *)imp; func(module,sel,application,launchOptions); }]; [self p_loadAppRootViewController]; return YES; } - (void)applicationWillResignActive:(UIApplication *)application { FMDBStartApplicationCenter *center = [FMDBStartApplicationCenter sharedAppEventCenter]; [center handleApplicationEvent:@"applicationDidEnterBackground:" Complete:^(id _Nonnull module, SEL _Nonnull sel) { IMP imp = [module methodForSelector:sel]; void (*func)(id, SEL,UIApplication *) = (void *)imp; func(module,sel,application); }]; }
第四步:自定义AppDelegate启动module都需要继承该类实现
@implementation FMDBDBModule
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self p_copyFMDBAppDB];
[self finished];
return YES;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。