1.
KVO :key--value --observer
键值观察者
// 1.首先要有一个被观察者
此时这个被观察者是自己找一个观察者观察自己的key对应的value值有没有改变,如果改变了就可以做一些相应的操作
1.创建一个被观察者对象
self.person = [[Person alloc]init];
self.person = [[Person alloc]init];
2.给被观察者注册观察者
// NSKeyValueObservingOptionNew 当重新给被观察者的name赋值时,触发监听方法,此时打印的chang(里面都是value值)永远都是最新的值
// NSKeyValueObservingOptionOld 当重新被观察者的name赋值是,触发监听方法,此时打印的chang 永远都是上一次的旧值
// NSKeyValueObservingOptionInitial 当初始化被观察者时,此时走监听方法 或者是重新赋值给观察者对象赋值的时候,此时走监听方法
// NSKeyValueObservingOptionPrior 当被观察者name属性赋值前后都会触发监听方法 用notificationIsPrior =1 标示赋值前触发
// 第一个参数:注册的观察者对象 第二个参数:要观察的key值路径 第三个参数:要观察value值的变化情况
// NSKeyValueObservingOptionNew 当重新给被观察者的name赋值时,触发监听方法,此时打印的chang(里面都是value值)永远都是最新的值
// NSKeyValueObservingOptionOld 当重新被观察者的name赋值是,触发监听方法,此时打印的chang 永远都是上一次的旧值
// NSKeyValueObservingOptionInitial 当初始化被观察者时,此时走监听方法 或者是重新赋值给观察者对象赋值的时候,此时走监听方法
// NSKeyValueObservingOptionPrior 当被观察者name属性赋值前后都会触发监听方法 用notificationIsPrior =1 标示赋值前触发
// 第一个参数:注册的观察者对象 第二个参数:要观察的key值路径 第三个参数:要观察value值的变化情况
[self.person
addObserver:self
forKeyPath:@"name"
options:NSKeyValueObservingOptionOld
context:nil];
self.person.name
=
@"guomeimei";//旧值
3.
触发的时机 一旦观察者发现,被观察者的name key值对应的value值发生变化的时候,就会自动调用这个方法
//一般观察到key值对应value值变化时,我们要做的一些操作都写在这个方法中
- (void)observeValueForKeyPath:(NSString
*)keyPath ofObject:(id)object change:(NSDictionary
*)change context:(void
*)context
{
NSLog(@"==%@",keyPath);
NSLog(@"--%@",object);
NSLog(@"++%@",change);
//一旦key对应的value值改变,就修改View的背景颜色
self.view.backgroundColor = [UIColor colorWithRed:kColorValue green:kColorValue blue:kColorValue alpha:1.0];
}
{
NSLog(@"==%@",keyPath);
NSLog(@"--%@",object);
NSLog(@"++%@",change);
//一旦key对应的value值改变,就修改View的背景颜色
self.view.backgroundColor = [UIColor colorWithRed:kColorValue green:kColorValue blue:kColorValue alpha:1.0];
}
4.
移除观察者
观察完成之后要移除观察者 观察者只能被移除一次
第二次就Crash
[self.view.subviews.firstObject
removeFromSuperview];