KVO :( key - Value - Observer )键值观察者,是观察者设计模式的一种具体实现.
KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了.
@implementationViewController
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.person= [[Personalloc]init];
NSLog(@"%@",_person.name);
#pragma mark ------使用KVC检测person对象的name属性值有没有发生变化,当它变化时,观察者会做出相应的操作*(执行指定方法)
// 1.注册观察者
[_person addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:@"我观察的是name属性"];
}
// 2.实现指定的方法(回调方法)
//当person的name值发生变化时,观察者会自动执行这个方法,这个方法名是固定的,不可改变
- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context
{
NSLog(@"被监测的那个对象的属性所在的路径:%@",keyPath);
NSLog(@"被观察者:%@", object);
NSLog(@"属性所有状态下的值:%@", change);
NSLog(@"在注册观察者的时候,传过来的context :%@", context);
if(![[changeobjectForKey:@"new"]isEqualToString:[changeobjectForKey:@"old"]]) {
self.view.backgroundColor= [UIColorredColor];
}
//4.移除观察者
[_person removeObserver:selfforKeyPath:keyPathcontext:context];
}
- (IBAction)changePersonValue:(UIButton*)sender {
// 3.当属性值发生变化时,将会触发回调方法
NSLog(@"name值发生了变化!");
_person.name=_textField.text;
}
@end