解藕一种方式。用一种最简单的方案来实现。
一、有一个FFURI基类,最基础三个变量和一个初始方法
scheme:有时候用来区分是外部协议 还是 内部协议
uri:跳转路径
params:传递参数。字典。可以追加参数。
- (instancetype)uriWithURI:(NSString *)scheme uri:(NSString *) params:(NSDictionary *)params;、
把param 先做一些参数矫正key,是否为NSNumber\NSString\JSONObeject。进行base64拼接到 uri上来。uri¶m=@"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的过程。