KVO全称Key-Value Observer. 是观察者设计模式的一种实际应用.
KVO的操作对象是对象.
简单使用:
现在创建一个Person类,Person类中有一个age属性,当点击按钮的时候改变age属性的值
#import "ViewController.h"
#import "Person.h"
@interface ViewController ()
@property(nonatomic,strong)Person *person;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.person = [[Person alloc]init];
self.person.age = @12;
//为person添加观察者 同时监听新值和旧值
[self.person addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
}
//按钮点击
- (IBAction)btnClick {
self.person.age = @18;
}
//keyPath:监听的值 object:被观察的对象 change:包含新值和旧值
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
NSLog(@"监听的值是:%@---被观察的对象是:%@---改变:%@",keyPath,object,change);
}
//移除观察者
- (void)dealloc{
[self.person removeObserver:self forKeyPath:@"age"];
}
@end
输出结果: