KVO(key value observer)浅解及实例
来源:互联网 发布:个人淘宝账号查询 编辑:程序博客网 时间:2024/06/06 01:09
KVO
1.那么什么是KVO呢?
统称:键值监听.英文名为:key value observer,`监听对象属性变化`的一种手段,可以用在开源框架,让代码解耦。例如:`上拉、下拉刷新控件
2.KVO的原理是什么呢?
底层实现运行时,动态添加的一个子类,同时重写set方法,调用observeValueForKeyPath方法.
3.KVO在代码实现过程中所做的事情又有哪些呢?
做的事情
1).更改了person的isa指针
未使用KVO之前isa指向如下图:
使用KVO之后isa指向如下图:
2).保存了参数: 1 监听者 2 枚举 3 携带参数
<span style="font-size:14px;"></span><pre name="code" class="objc"> //KeyPath //参数: 1 监听者 2 枚举 3 携带参数 4 实现了 observeValueForKeyPath [p addObserver:self forKeyPath:@"height" options:NSKeyValueObservingOptionOld |NSKeyValueObservingOptionNew context:nil];
3).创建 NSKVONotifying_GHPerson 类 person的子类
验证方法:可通过创建一个继承自NSObject的子类(NSKVONotifying_GHPerson),其它不要任何操作,运行程序,会立马崩溃.说明说创建的子类与person的子类重名!若不相信,可随便创建一个继承自NSObject的子类,名字随便取,除了NSKVONotifying_GHPerson这个名字除外,发现程序正常运行.有不懂的可以私聊!!!
4).重写NSKVONotifying_GHPerson set 方法
- (void)setAge:(NSInteger)age{ [super setAge:age];}
重写目的:就是为了取值,取改变后的值.
5).set 方法 1.调用父类的set 2.调用监听者的observeValueForKeyPath
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{ NSLog(@"%@",change);}
在最后一定要切记,记得在创建了KVO监听者后,一定记得销毁:
- (void)dealloc
{
[self.p removeObserver:self forKeyPath:@"age"];
}
总结:个人觉得关于KVO的解析还不是很完善,希望大家多多给予修改意见,大家共同进步.
- KVO(key value observer)浅解及实例
- KVO(Key-Value-Observer)键值观察者
- iOS开发7-KVO(Key-Value Observer)键值观察
- 45.KVO(Key-Value-Observer)键值观察者
- Key-Value Observing (KVO)
- Key-Value Observing (KVO)
- KVO(Key Value Observing)
- KVO,Key-Value Observing
- KVO(Key-Value observing)介绍
- KVO(Key-Value Observing)
- IOS Key-Value Observing (KVO)
- IOS KVO,NSKeyValueObservance: Observer:, Key path:, Options:
- Key Value Coding && key Value Observing KVC KVO
- KVC(key value coding)/ KVO(key value observing)
- KVO---Key Value Obersving
- KVO (Key-Value Observing) 键值观察模式
- KVO (Key-Value Observing) 键值观察模式
- KVO(key value observing)的使用
- 基础篇之less与css
- thinphp判断是否登陆(控制器的继承)
- 《拓扑排序》hdu acm 5.2.4 c++优先队列 邻接表
- linux下php安装curl模块
- 一看就明白的爬虫入门讲解:基础理论篇
- KVO(key value observer)浅解及实例
- 安卓 Activity(1) 基础和生命周期(马剑威)
- 我的百度云地址
- redis的php类-使用socket通信
- android HttpClient获取json数据
- 利用predis操作redis方法大全
- linux下php开发自定义扩展库
- 关于创业,感觉这句话说到了点子上
- ViewPager+Fragment实现左右滑动页