KVO 键值观察者模式是cocoa的一个重要机制类似Notification模式。当被观察者属性发生改变时观察者做相应的操作。
新建一个Person类继承NSObject,添加name和age属性,接着建一个PersonObserver类继承于NSObject同时实现
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
方法
具体如下:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
if ([keyPath isEqualToString:kPathName]) {
NSLog(@"old name:%@ \nnew name:%@", [change objectForKey:@"old"], [change objectForKey:@"new"]);
//Do something what you want to do
//...
return;
}
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
利用keyPath判断是否是我们监听的属性发生了变化,如果是做相应的操作。
为对象添加观察者:
Person *person = [[Person alloc] init];
[person setName:@"old name"];
PersonObserver *observer = [[PersonObserver alloc] init];
[person addObserver:observer forKeyPath:@"name" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
[person setName:@"new name"];
[person removeObserver:observer forKeyPath:@"name"];
运行效果:
2013-03-05 16:08:04.347 learnOcKVO[10980:11303] old name:old name
new name:new name