路由解耦

解藕一种方式。用一种最简单的方案来实现。

一、有一个FFURI基类,最基础三个变量和一个初始方法
scheme:有时候用来区分是外部协议 还是 内部协议
uri:跳转路径
params:传递参数。字典。可以追加参数。

  • (instancetype)uriWithURI:(NSString *)scheme uri:(NSString *) params:(NSDictionary *)params;、

把param 先做一些参数矫正key,是否为NSNumber\NSString\JSONObeject。进行base64拼接到 uri上来。uri&param=@"json字符串"

二、FFURIManager
跳转管理器
负责添加路径:addPathAction
负责执行路径:runActionWithURI
1.addPathAction
level
withActionBlock:执行回调要处理的内容
变量:pathArray数组: 保存所有添加进来的 path和actionblock
level插入的pathArray位置。通过对比level值,更容易被查找到。

2.runActionWithURI
2.1判断是否为内部协议,不是直接用[[UIApplication sharedApplication] openURL:]]打开。

2.2假如没有传递当前的控制器 最好是传了。获取当前正在运行的最顶层viewcontroller,
先遍历tabbarVC 拿到 selectVC 接着再遍历最上层。排除UIAlertController、_UIAlertShimPresentingViewController。

2.3做一个缓存 。比如一开始路径有500个。每次都去遍历很可怕。
把已经跳转过的,先加入缓存,没有 就从大的路由缓存去取。

key - block的过程。

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

推荐阅读更多精彩内容