URL-Scheme注册
第三方库:JLRoutes、routable-ios、HHRouter、MGJRouter
优点:
- 服务器可以动态的控制页面跳转
缺点:
- 组件多起来时,需要提供一个关于URL和服务的对应表,并且需要开发人员维护表。
- 启动时,每个组件都需要去注册自己的URL和服务,内存中需要保存这样一份表,因此组件多起来后会有内存问题
- 需要在load方法里注册URL的map规则,影响启动速度。
- 远程调用只能传json数据,image这样的不行。
Protocol-class注册
优点:
- 没有硬编码。
缺点:
- Protocol都要向ModuleManager进行注册
- 需要在load方法里注册protocol,影响启动速度
runtime实现的Target-Action方法
第三方库:CTMediator
优点:
- runtime借助了OC运行时的特征,实现了组件间服务的自动发现,无需注册即可实现组件间的调用。
- 维护性、可读性、扩展性比较好
- 有一定的安全保证,对url中进行Native前缀进行验证
缺点:
- 在Category中将常规参数打包成字典,在Target处再把字典拆包成常规参数,这就造成了一部分的硬编码
- 每个category对应一个Target,target文件比较多。
Demo
三种方案的demo都整理在github上。