App启动后服务初始化方案
现象
在- application:didFinishLaunchingWithOptions:中,有很多初始化自己和一些第三方服务的代码,比较混乱,耦合度很大.随着业务的增加会越发明显.
目的
- 解耦.模块分工明确.
- 给AppDelegate瘦身.让AppDelegate只负责它应该负责的事情:
UIApplicationDelegate
解决方案
在UIApplication中,有一系列的通知Key,其中UIApplicationDidFinishLaunchingNotification就是我们所需要的.假设我们要初始化LogSystemService,LogSystemService需要在- application:didFinishLaunchingWithOptions:之前注册通知.所以我们要用到NSObject的+ (void)load方法,根据苹果文档,只要类所在文件被引用就会被调用.
示例
1 | __block NSObject *observer = |
注意
- block 对 observer 对象的捕获早于函数的返回,所以若不加__block,会捕获到 nil
- 若要获取到
launchOptions,notification中的userInfo即为launchOptions.NSDictionary *launchOptions = [notification userInfo];