一,概述
KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。
二、使用方法
系统框架已经支持KVO,所以程序员在使用的时候非常简单。
1. 注册,指定被观察者的属性,
2. 实现回调方法
3. 移除观察
三、代码示例
假设一个场景,定义一个Person类,属性有name,age,当年龄改变时,显示当前年龄
1.定义Person类
@interfacePerson :NSObject
@property(strong,nonatomic)NSString*name;
@property(nonatomic,assign)NSIntegerage;
@end
2.在controller中引入Person,实例化并监听属性
当单击时,改变age,实现回调方法
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void*)context
@interfaceViewController()
{
Person*personKVO;
}
@end
@implementationViewController
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
personKVO= [[Personalloc]init];
[personKVOsetValue:@"admin"forKey:@"name"];
[personKVOsetValue:@"20"forKey:@"age"];
[personKVOaddObserver:selfforKeyPath:@"age"options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOldcontext:nil];
}
- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
//[personKVO setValue:@"21" forKey:@"age"];
[personKVOsetAge:13];
}
- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context
{
if([keyPathisEqual:@"age"])
{
idage =[personKVOvalueForKey:@"age"];
NSLog(@"age改变%@",age);
}
}
- (void)didReceiveMemoryWarning {
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
当Model值发生改变时,监听对象会立即得到通知,适用于界面数据展示。
简单随笔,愿与君共勉。
网友评论