AppDelegate
是一个糟糕代码的典型例子。很多不同的功能被写在方法中,在应用程序生命周期中被一次性调起。但这些都没关系了。使用 PlugAppDelegate
,您可以将 AppDelegate 从其插件中解耦。每个 ApplicationService
都有与 AppDelegate
共享的生命周期。
让我们看看一些代码。这是 ApplicationService
的样子
#import "LoggerApplicationService.h"
@implementation LoggerApplicationService
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"LoggerApplicationService didFinishLaunchingWithOptions");
return YES;
}
@end
就是这样。它完全像 AppDelegate 一样。把 ApplicationService
看作是子 AppDelegate。
在 AppDelegate 中,您只需继承自 PluggableApplicationDelegate 并注册服务。
#import "AppDelegate.h"
#import "LoggerApplicationService.h"
#import "PushApplicationService.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (NSArray<ApplicationService> *)services {
if (![super services]) {
super.services = (NSArray<ApplicationService>*)@[[LoggerApplicationService new],
[PushApplicationService new]];
}
return super.services;
}
@end
基本上,您使用反转控制。不是AppDelegate实例化您的依赖,在其生命周期的每个步骤中进行操作,而是创建与AppDelegate共享生命周期的对象,并将它们插入您的AppDelegate中。这些对象是AppDelegate的观察者。您的AppDelegate的唯一责任就是通知它们AppDelegate的生命周期事件。
要运行示例项目,请克隆仓库,然后从示例目录首先运行 pod install
PluggableApplicationDelegate 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod "PlugAppDelegate"
Obj-C 版本: Sergey Makkena [emailnbsp;protected]
Swift 版本: fmo91, [email protected] PluggableApplicationDelegate
PlugAppDelegate 可在 MIT 许可证下使用。有关更多信息,请参阅 LICENSE 文件。