KVO代码
2015-10-04 14:47
260 查看
// KVO 作用:观察对象的值是否发生变化,可以展示变化前后的值
// 某个对象添加观察者
/*
参数1:self
参数2:观察被观察扎哪一个具体的值发生变化
参数3:取到被观察者变化前及变化后的值
*/
[_dogModel addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew| NSKeyValueObservingOptionOld context:nil];
[_catModel addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew |NSKeyValueObservingOptionOld context:nil];
// 实现KVO的相关方法
// 只要被观察者的值发生变化就执行
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
/*
参数1:被观察的具体值
参数2:被观察者的指针
参数3:变化前以及后的值 key为old的时:变化前的值,可以为new时:变化后的值
参数4:上下文
*/
// 判断被观察者是属于哪个类?
if ([object isKindOfClass:[DogModel class]]) {
NSString * old = [change objectForKey:@"old"];
NSString * new = [change objectForKey:@"new"];
// 展示
_label.text = [NSString stringWithFormat:@"old:%@ new:%@", old, new];
}
else if ([object isKindOfClass:[CatModel class]])
{
NSString * old = [change objectForKey:@"old"];
NSString * new = [change objectForKey:@"new"];
_nextLabel.text = [NSString stringWithFormat:@"old:%@ new:%@",old, new];
}
}
// 注销观察者
- (void)dealloc
{
[_dogModel removeObserver:self forKeyPath:@"name" context:nil];
}
// 某个对象添加观察者
/*
参数1:self
参数2:观察被观察扎哪一个具体的值发生变化
参数3:取到被观察者变化前及变化后的值
*/
[_dogModel addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew| NSKeyValueObservingOptionOld context:nil];
[_catModel addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew |NSKeyValueObservingOptionOld context:nil];
// 实现KVO的相关方法
// 只要被观察者的值发生变化就执行
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
/*
参数1:被观察的具体值
参数2:被观察者的指针
参数3:变化前以及后的值 key为old的时:变化前的值,可以为new时:变化后的值
参数4:上下文
*/
// 判断被观察者是属于哪个类?
if ([object isKindOfClass:[DogModel class]]) {
NSString * old = [change objectForKey:@"old"];
NSString * new = [change objectForKey:@"new"];
// 展示
_label.text = [NSString stringWithFormat:@"old:%@ new:%@", old, new];
}
else if ([object isKindOfClass:[CatModel class]])
{
NSString * old = [change objectForKey:@"old"];
NSString * new = [change objectForKey:@"new"];
_nextLabel.text = [NSString stringWithFormat:@"old:%@ new:%@",old, new];
}
}
// 注销观察者
- (void)dealloc
{
[_dogModel removeObserver:self forKeyPath:@"name" context:nil];
}
相关文章推荐
- DownLoadData代码
- 空类内存sizeof
- Java-二分查找算法
- 单例代码
- java 内部类
- vsftp关于权限的条目配置
- 萌妹子Python入门指北(一)
- Add Binary | leetcode 67 【Java解题报告】
- GOF 23 设计模式之 解释器模式(Interpreter)与访问者模式(Visitor)
- java SE复习笔记60
- java SE复习笔记59
- Spring 4与Struts 2项目基于XML的集成实战
- java SE复习笔记58
- 面向对象及构造代码块、静态代码块、构造函数的区别
- C# 获得当前路径(目录)的方法
- java 复习笔记57
- java SE复习笔记56
- Spring 与JDBC结合
- C++编程思想
- java SE复习笔记55