昨天晚上在听移动端架构课程中了解到有关于kvo的第三方框架
FBKVOControlloer是FaceBook开源的一个 在 iOS,maxOS上使用 kvo的 开源库;
提供了block和@selector(SEL) 的回调操作,很方便实用;
https://github.com/facebook/KVOController
FBKVOController的核心代码:
NSObject+FBKVOController.h
NSObject+FBKVOController.m
FBKVOController.h
FBKVOController.m
简单的实现KVO 分3步
1.注册addObserver
2.实现监听
3.移除
利用系统的KVO 方法,必须要注意释放,也无法实现block 方式实现,麻烦,推荐FBKVOController,线程安全的KVO ,并且方便实用,使用方法如下
监测某个对象的值,然后将selector写入observe函数中,当值发生改变,就会调用通知的函数。
@interfaceViewController(){
FBKVOController *_fbKVO;
}
- (void)viewDidLoad {
[superviewDidLoad];
Model *model=[[Model alloc]init];
model.name=@"Y.X";//初始化_fbKVO=[FBKVOController controllerWithObserver:self];//注册通过block 方式直接获取监听[_fbKVO observe:model keyPath:@"name"options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew block:^(idobserver,idobject,NSDictionary*change) {NSLog(@"%@",change);
}];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3* NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
model.name=@"update data";
});
⚠️注意!!!注意!!!注意!!!
options一定是 NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew 尤其是不常用这个第三方库的人这里可能会遇坑。。。。
上面就是简单的FBKVOController 实现的kvo监听,并且FBKVOController 提供了block, action:(SEL)2中方式实现监听;同时可以对model 多个属性进行监听,如下
//keypaths 添加多个属性,就可以了,然后在别的地方修改model 的多个属性的值,这里都可以监听到的,[_fbKVO observe:model keyPaths:[NSArrayarrayWithObjects:@"name",@"sex",nil] options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew block:^(idobserver,idobject,NSDictionary*change) {NSLog(@"%@",change); }];
以上就是kvo 的简单实现,和FBKVOController 的使用,推荐FBKVOController实现kvo
功能,方便简单,保证线程安全,
好接下来我们看源码
此篇文章介绍了如何优雅地使用 KVO及解读源码
https://draveness.me/kvocontroller