iOS 关于 KVO

 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

你可能感兴趣的:(iOS 关于 KVO)