OC:功能高内聚

说明
首次发布 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];
     }];
}

说明:

    1. + load方法在足够早的时间点(main函数执行之前)被调用;
    1. block 版本的通知注册会产生一个__NSObserver *对象用来给外部 remove 观察者;
    1. block 对 observer 对象的捕获早于函数的返回,所以若不加__block,会捕获到 nil;
    1. 在 block 执行结束时移除 observer,无需其他清理工作。

这样,在模块内部就完成了在程序启动点代码的挂载。


拓展

通知是在 - application:didFinishLaunchingWithOptions: 调用完成后才发送的。AppDelegate 作为程序级状态变化的 delegate,应该只做 路由分发 的作用和实现 <UIApplicationDelegate> 的方法,具体逻辑实现代码还是应该在各自的模块中。

后记: 该文章参考 孙老师 的博客,在此表示衷心的感谢。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,634评论 25 709
  • 假设我们需要建造一栋建筑,那么第一步需要做什么工作?——没错,设计和规划好地基,万丈高楼平地起依靠的是稳健合理的地...
    汪继志阅读 860评论 0 10
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,865评论 1 92
  • 当确定了APP的设计需求和产品的整体结构之后,要着手开始规划和制作APP的原型及UI界面。一款APP的好与不好,很...
    设计思考阅读 48,927评论 7 117
  • 我开始进一步的回忆我的童年,但是我拼尽全力,大脑能够及的最远回忆只能到三岁左右的样子。所以,我想从我自身寻找答案肯...
    栏骙粽阅读 658评论 0 3