KVO的底层实现原理
来源:互联网 发布:图片分析软件 编辑:程序博客网 时间:2024/05/16 04:00
KVO 的底层实现原理 :
首先创建一个类: Peron
Person 有两个属性
@property (nonatomic,strong)NSString * name;
@property (nonatomic,assign)CGFloat height;
在控制器来定义一个属性 Person 用来保存创建的Person
@property (nonatomic,strong)Person * p;
创建Person对象 并监控person 属性 height 的改变
Person * p =[[Person alloc] init]; self.p = p; p.name = @"张三"; p.height = 170; //添加KVO 监控 p 当中 属性height 的改变 [p addObserver:self forKeyPath:@"height" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil]; p.height = 180;
监控值改变以后打印值得变化
-(void)dealloc{ [self.p removeObserver:self forKeyPath:@"height"];}//监控属性变化触发的方法..-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{ if ([keyPath isEqualToString:@"height"]) { NSLog(@"%@",change); }}
//做了哪些事情
//1.动态的创建一个叫NSKVONotifying_Person 的子类
//2.更改之前类的 isa指针为子类
//3.传入一堆参数 1.监听者(将来调用observeValueForKeyPath) 2.keypath(决定了重写哪个set方法) 3.枚举(决定传哪些给你) 4.携带参数
//4.根据keypath 重写子类的set方法
//5.在子类的set方法中 根据枚举 保存所有的属性值 然后调用父类的set方法然后用监听者的observeValueForKeyPath... 把对应的值传出去通知监听者发生了事情
//系统相当于创建了一个子类
@interface NSKVONotifying_Person :Person
@end
//在子类里重写了父类的setHeight 方法
@implementation NSKVONotifying_Person
-(void)setHeight:(CGFloat)height
{
self.height = height;
//重写了set方法并在里面做了一些事情
//调用了 observeValueForKeyPath方法..
}
@end
- KVO的底层实现原理
- KVO的底层实现原理
- KVO的底层实现原理
- KVO的底层实现原理
- KVO底层实现原理
- KVO底层实现原理
- KVO底层实现原理
- iOS的KVO底层实现原理
- iOS中KVO的底层实现原理
- KVC/KVO底层实现原理
- iOS kvo 底层实现原理
- iOS KVO底层实现原理
- KVO的底层实现
- kvo的底层实现
- kvo的底层实现
- KVO底层原理
- KVO的实现原理
- KVO的实现原理
- MVC与三层架构区别
- 如何通过自己的应用,打开自己手机第三方应用
- 汇编常用语句
- 关于时间管理和高效学习的感悟(一点点完善)
- Tomcat配置https及访问http自动跳转至https
- KVO的底层实现原理
- vs2010在解决方案中不显示已经存在的文件夹
- Linux下安装MySQL 5.7
- 检测URL是否能正常打开
- PythonCookBook-数据结构和算法
- 集成Vitamio来播放网络视频(支持多种格式解码)
- 使用OpenCV训练Cascasde分类器
- js中let和var定义变量的区别
- 关于ORA-01445:无法从不带保留关键字的表的连接视图中选择ROWID或采样