说明 | |
---|---|
首次发布 | 2016年12月08日 |
最近更新 | 2018年06月25日 |
示例代码:
+ (void)load {
__block id observer =
[[NSNotificationCenter defaultCenter]
addObserverForName:UIApplicationDidFinishLaunchingNotification
object:nil
queue:nil
usingBlock:^(NSNotification *note) {
[self configTools]; // 这里做配置
[[NSNotificationCenter defaultCenter] removeObserver:observer];
}];
}
说明:
+ load
方法在足够早的时间点(main
函数执行之前)被调用;
- block 版本的通知注册会产生一个
__NSObserver *
对象用来给外部 remove 观察者;
- block 对
observer
对象的捕获早于函数的返回,所以若不加__block
,会捕获到 nil;
- 在 block 执行结束时移除
observer
,无需其他清理工作。
这样,在模块内部就完成了在程序启动点代码的挂载。
拓展
通知是在 - application:didFinishLaunchingWithOptions:
调用完成后才发送的。AppDelegate
作为程序级状态变化的 delegate
,应该只做 路由 、 分发 的作用和实现 <UIApplicationDelegate>
的方法,具体逻辑实现代码还是应该在各自的模块中。
后记: 该文章参考 孙老师 的博客,在此表示衷心的感谢。