| 说明 | |
|---|---|
| 首次发布 | 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> 的方法,具体逻辑实现代码还是应该在各自的模块中。
后记: 该文章参考 孙老师 的博客,在此表示衷心的感谢。
