iOS 组件化Appdelegate解耦工具TTDispatcher

在未使用组件化架构之前一直采用Aspects框架对Appdelegate进行分离处理,但使用组件化后这个框架就不太好用了,模块都以pod的形式集成,我们希望模块各自处理Appdelegate事件,因此参照网上的资料,最终完成了。 详细见 https://github.com/icofans/TTDispatcher

思路

1.用运行时对UIApplication类进行hook

在交换的setDelegate方法中去交换appdelegate的23个方法,并指定一个类去处理交换后的方法。

2.在处理delegate方法的类,对已注册事件的module进行事件派发

3.在Appdelegate维护需要注册的module,之后需要使用的module就可以直接使用Appdelegate的事件了。

Problem I meet

1.由于Hook了Delegate的方法,因此原Appdelegate的相关方法 调用者发生了变化,即在方法中self不再是指本身。因此在原Appdelegate使用self调用方法或者属性会出错,由于目前项目使用组件化,原Appdelegate并没有代码,因此暂未考虑,但仍旧需要考虑后期如何解决:

2.可变参数宏,起初以为在宏中可变参数和方法内相同,真正使用的时候才发现并未如此,因此借鉴了其他优秀库,对可变参数宏探索了一番,最终扫清障碍。

TODO

优化实现细节