KVO,即Key Value Observing ,它提供了一种机制,就是指定的对象的属性的值被修改后,则对象就会接受到通知,简而言之,每次被指定的的被观察者的对象的属性被修改后,KVO则自动通知观察者!
做了一个简单的例子,如下:
#import "ViewController.h"
#import "Persion.h"
@interface ViewController ()
@property (nonatomic,strong)Persion *p;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//Person只有一个int 类型age属性
Persion *p = [[Persionalloc]init];
p.age = 20;
//添加监听:age,NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld新值和旧值都发给change
[p addObserver:selfforKeyPath:@"age"options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOldcontext:nil];
//改变age的值
p.age = 30;
self.p = p;
}
/**
* 监听到age改变时执行
*
* @param keyPath 监听的属性
* @param object 属性所属的类
* @param change 改变内容
* @param context 监听传递参数(void *)== id
*/
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
NSLog(@"类%@的属性%@的值改变了:%@",[objectclass],keyPath,change);
}
-(void)dealloc
{
//取消对age的监听
[self.premoveObserver:selfforKeyPath:@"age"];
}
2014-12-08 15:39:33.287 KVO[83635:3710613] 类Persion的属性age的值改变了:{
kind = 1;
new = 30;//新值
old = 20;//旧值
}