Mbox平台还是相当好用的,就是可能上手的难度会有一点点高
iOS的学习差不多先到这里吧,先开始写大作业吧
KVO和Notification还不是很熟,UITextField啥的应该也要查一下文档吧
感觉又是面向百度编程
Scheme
Project 设置 info中的URL scheme,输入对应的app://就会自动唤起该App,是一个系统级别的服务
在UIApplication中处理参数和业务逻辑
– (BOOL) application:openURL:options:
可以在AppDelegate中实现这个函数来实现参数对应的业务逻辑
函数canOpenURL可以判断该URL是否存在,可以对不同的结果实现不同的业务逻辑
我们在iOS9之后需要在项目配置中添加白名单才可以打开响应的App,否则会出现canOpenURL返回是NO的,但是结果却应该是YES
Universal Link
这是一个通用的链接,可以通过http/https协议启动客户端
避免了Scheme重复 Web和Native统一
需要配合Web端进行注册
在Safari/微信/其他App中使用Universal Link
需要开启Assocated Domain,safari中打开会启动h5进行浏览
有一部分App会禁用Universal Link,因为会引起用户时长的减少
组件化
- 适用于基础功能稳定、项目规模较大的项目
- 项目变大、编译时间长
- 多团队发布、集成、测试不便,协同开发互相依赖和冲突
组件化拆分
工具类/基础功能/基础UI控件/业务线等
组件化通信选型
常用三种方案
- Target-Action
- URL Scheme
- Protocol Class
Target-Action
是一个中心化的结构,所有类都通过在这个类中集成,但是包含头文件会使得这个类结构特别混乱,所以我们不能包含这里面的头文件
一般来说我们使用类似以下的结构来实现Target-Action的一个方法
1 2 3 4 5 |
+(__kindof UIViewController *)detailedViewControllerWithUrl:(NSString *)detailUrl{ Class detailCls = NSClassFromString(@类名) UIViewController *controller = [[detailCls alloc]performSelector:@selector(方法名)withObject:detailURL; return controller; } |
URL Scheme
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
@interface Mediator:NSObject typedef void(^MediatorProcessBlock)(NSDictionary *params); + (void)registerScheme:(NSString *)scheme processBlock:(MediatorProcessBlock)processBlock; + (void)openUrl:(NSString *)url params:(NSDictionary *)params; @end @implemation Mediator + (void)load{ //初始化并调用函数,生成ViewController } + (NSMutableDictionary *)mediatorCache{ static NSMutableDictionary *cache; static dispatch_once_t onceToken; dispatch_once(&onceToken,^{ cache = @[].mutableCopy; }); return cache; } + (void)registerScheme:(NSString *)scheme processBlock:(MediatorProcessBlock)processBlock{ if(scheme && processBlock){ [[[self class]mediatorCache]setObject:processBlock forKey:scheme]; } } + (void)openUrl:(NSString *)url params:(NSDictionary *)params{ MediatorProcessBlock block = [[[self class]mediatorCache]objectForKey:url]; if(block){ block(params); } } @end |
在业务逻辑中,使用+ (void)openUrl:(NSString *)url params:(NSDictionary *)params;即可
Protocol-Class
Protocol Warpper层
中间件返回Protocol对应的Class
和之前的方法类似
0 条评论