AppDelegate 解耦
AppDelegate 控制着整个应用的生命周期,在应用开发中的重要性不言而喻. 随着业务的增长,会发现越来越多的业务的加入, AppDelegate
中的代码量急剧增加, 变得难以控制, 解耦也就迫切起来.
AppDelegate
解耦是一个很好的学习设计模式的场景. 下面是我总结的别人的经验,如有侵权,请联系我:
分类解耦
这种解耦方式只是利用分类的特性, 将业务代码分离到不同的文件中, 但是还是需要在 AppDelegate
中添加很多业务逻辑的调用, 简单应用推荐此方法, 完全可控, 且没有太多坑
命令模式解耦 参考地址
成员
- 不同的命令
Command
- 统一的命令
CommandManager
负责执行命令 AppDelegate
负责在具体的地方Method
方法实现中 嵌入CommandManager
的 方法调用
优缺点
好处:
- 将不同的业务封装成命令对象, 统一命令的接口, 面向接口调用, 管理方便
- 扩展性较强, 只需要新建
Command
对象, 在CommandManager
中接入即可
不足:
AppDelegate
需要处理的代理方法过多,Command
只能解决一些常用统一的处理方法, 适用范围不足Command
对象 需实例化, 一直贮存在内存中
组合方式 参考地址
成员
- 多个 实现
UIApplicationDelegate
等协议的对象 - 管理上面👆对象的
Manager
AppDelegate
在适当的地方 调用 协议对象
优缺点
优点:
- 组合的方式实现多样
- 因为 实现了
UIApplicationDelegate
协议, 所以基本适用AppDelegate
任何地方
缺点:
- 太多协议对象 导致内存驻留
- 不好处理依赖关系
- 需要在所有的
AppDelegate
实现UIApplicationDelegate
方法的地方调用 (其实也不太算得上 😆)
消息转发方式
成员
- 多个可以处理某些
UIApplicationDelegate
的 代理对象 - 使用
runtime
管理 代理对象的管理者 AppDelegate
被 上面 管理者 接管
优缺点
优点:
- 业务处理覆盖面广
- 解耦性强
缺点:
- 使用运行时, 有时候坑比较大, 比如覆盖系统方法, 这个可能性谁也不能保证, 比如是多代理还是单代理处理
UIApplicationDelegate
协议方法
参考
基本上应该就这些方式, 其他的应该是在这些方式上增减,比如增加模块优先级,增加模块中某些方法优先级 (这个维护性也不会怎么样就) 等等