/**
* KVO: key value observing
观察者模式,和通知中心类似.
当指定对象的属性发生变化时,对象就会收通知,
使用:
1.添加观察者
2.使用回调方法
3.触发回调方法.
4.移除观察者.
*/
//1.注册观察者
/**
*addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:nil
参数1:观察者对象
参数2:被观察者的属性
参数3:选项设置
Old 获取变化之前的旧值;
New 获取变化之后的新值;
Initial 即使赋值操作,添加观察者之后,仍会触发一次观察者的方法.
Prior 每次属性发生变化,会触发两次,变化之前和变化之后各触发一次.变化之前的字典中会有一个notificationIsPrior键值对,变化之后没有该键值对.
参数4:可用于传值.
*/
[self.aMovie addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:nil];
#pragma mark -KVO 自动回调方法-
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
//change 中的kind有1,2,3,4. 1针对赋值,2,3,4针对集合类(数组,字典,集合)的插入,删除,替换,
//一个被观察者可以添加多个观察属性,可通过keyPath做以区分.
if ([keyPath isEqualToString:@"title"]) {
NSLog(@"%@",change[NSKeyValueChangeNewKey]);
}else if ([keyPath isEqualToString:@"type"]){
NSLog(@"%@",change);
}
}
//当不需要使用观察者时 移除观察者.
-(void)dealloc{
[self.aMovie removeObserver:self forKeyPath:@"title"];
[self.aMovie removeObserver:self forKeyPath:@"content"];
}