SHRMAppDelegate 0.0.3

SHRMAppDelegate 0.0.3

GitWangKai 维护。



  • 作者
  • 王凯

链接

介绍

对 AppDelegate 深度解耦的逻辑,教会您实现 AppDelegate 的模块化拆分,原本上千行的代码可以简化到 10 行内,易于使用,代码侵入性极低。支持 iOS6+

简化后的 AppDelegate:

#import "SHRMAppDelegate.h"
@interface AppDelegate : SHRMAppDelegate
@property (strong, nonatomic) UIWindow *window;
@end
#import "MainViewController.h"
@implementation AppDelegate
@synthesize window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[super application:application didFinishLaunchingWithOptions:launchOptions];
[self initMainController];
return YES;
}

- (void)initMainController {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
self.window.rootViewController = [[MainViewController alloc] init];
[self.window makeKeyAndVisible];
}
@end

没错,引入框架后,您的 AppDelegate 只包含这些代码!怎么做到的?请查看示例。

特性

  • 搭积木式设计。
  • AppDelegate.m 内的代码精简到 10 行内。
  • 原有的功能模块拆分为独立的子模块,模块独立,模块间无耦合。
  • 每个模块都拥有自己的生命周期,目前支持模块的初始化->销毁。
  • 模块可自定义执行顺序,即可以自定义原 AppDelegate 中不同业务功能的加载顺序。
  • 模块扩展性高,易于维护,新需求只需添加模块即可,同时在模块内部管理该模块的生命周期。
  • 代码可读性强,每个模块仅负责自身模块内的业务。
  • 模块支持插拔,需要时添加到项目中,不需要时无需删除,不影响项目构建!
  • 其他特性请自行在示例中挖掘。

安装

1.CocoaPods

  1. 在 Podfile 中添加 pod 'SHRMAppDelegate', '~> 0.0.2'
  2. 执行 pod installpod update
  3. 在 AppDelegate 中导入 <SHRMAppDelegate.h> 并继承。

2.手动导入

下载SHRMAppDelegate文件夹,将SHRMAppDelegate文件夹拖入到您的项目中。

用法

  • SHRMAppDelegate是暴露给外部的主体类,内部实现了所有的App生命周期方法,当然您也可以指定实现某些方法,或者不需要框架实现,只需在您的AppDelegate中重写即可。
  • SHRMAppEventModuleManager是模块的管理类,管理着所有已注册的模块。
  • SHRMBaseAppEventModule是所有模块需要继承的基类,为所有模块提供公共方法,包括模块执行顺序、模块生命周期管理等,可自行扩展。
  • SHRMAppEventAnnotation是模块注册专用类,每个模块都需要注册,为什么需要注册?不注册如何管理呢。

1.AppDelegate继承SHRMAppDelegate,让SHRMAppDelegate来接管App的生命周期函数。

2.创建插件,继承SHRMBaseAppEventModule

#import "SHRMBaseAppEventModule.h"

@interface testMudule : SHRMBaseAppEventModule

@end
SHRMAppEventMod(testMudule)

@implementation testMudule

// 该插件执行顺序
- (NSInteger)moduleLevel {
return 1;
}

//该插件需要在didFinishLaunchingWithOptions:生命周期函数中做些操作
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//插件初始化
[self initMudule];
//插件销毁,父类实现
[self destroyModule];
return YES;
}

- (void)initMudule {
NSLog(@"testMudule init");
}

@end

插件概念:每个插件都表示一个独立业务,例如程序启动后的数据库处理、定位处理等都可以定义为插件,让插件继承SHRMBaseAppEventModule,插件就会被管理。如果想在程序启动时执行该插件,就在该插件中重写didFinishLaunchingWithOptions:即可,如上。如果想在程序进入后台时执行该插件的一些业务,只需重写applicationDidEnterBackground:即可,然后在该函数中进行业务处理。

3.详细使用请参考demo,如有疑问欢迎提交issue,欢迎star。

许可证

SHRMAppDelegate遵循MIT许可证。有关更多信息,请参阅许可证文件