JLRoutes 的实现原理
JLRoutes是通过解析URL不同的参数,并用block回调的方式处理 页面间的传值以及跳转。其本质就是在程序中注册一个全局的字典, key是URL scheme,value是一个JLRoutes对象,该对象包含一个 数组,该数组中包含了多个 参数为字典的block回调。跳转的时候 双层遍历去匹配block回调
注册流程
调用 addRoute:handler: 方法注册 url scheme,保存/取出每个 scheme 对应的 routes controller 对象(以 key-value 形式保存的);注册 url pattern,按优先级将每个 pattern 对应的 JLRRouteDefinition(封装 pattern、priority、回调 block 等数据)通过插入排序的方式保存到数组中,这里一个 pattern 可能对应一个或者多个 JLRRouteDefinition。 如下图:
解析 URL 流程
调用 routeURL: 方法唤起 URL时,取出 scheme 对应的 JLRoute,生成 JLRRouteRequest,然后遍历JLRoute的数组里面的 JLRRouteDefinition, JLRRouteDefinition 会和 request 进行匹配并生成一个 JLRRouteResponse 对象,如果匹配上了,就回调 block,并回传参数。
下面使用源码解读 解析URL流程
使用场景
deep link:通过 Custom URL Scheme 由外部跳转到 app,比如推送跳转,app 间跳转。 app 内部路由跳转:使用中介者模式对 controller 进行解耦。
使用方法
启动app时注册
跳转
跳转传参以及回调
处理回调
路由跳转设计
维护一个全局的字典,key是URL的某个字段(通常用host,当然 也可以也定其他字段),value是 对应VC的类型。 这样我们就可以不需要对每个vc 都注册一个路由, 达到了重用的效果
|