1.KVO概述
- KVO,即:Key-Value Observing,它提供一种值监听机制,用来监听制定对象的属性的变化。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了
2.KVO基本使用
@interface Person : NSObject
{
@public
int _age;
}
/** 姓名*/
@property (nonatomic, copy)NSString *name;
/** 年龄*/
@property (nonatomic, assign)int age;
@end
Person *p = [Person new];
p.name = @"MR";
p.age = 25;
[p addObserver:self forKeyPath:@"age" options:nil context:nil];
[p removeObserver:self forKeyPath:@"age"];
- (void)observeValueForKeyPath:(nullable NSString *)keyPath ofObject:(nullable id)object change:(nullable NSDictionary *)change context:(nullable void *)context
{
NSLog(@"keyPath = %@, object = %@ , change = %@, context = %@", keyPath, object, change, context);
}
3.KVO实现原理
- 只要给对象属性添加一个监听者,那么在程序运行时,系统就会自动给该对象生成一个子类对象,并且重写自动生成的子类对象的被监听属性的set方法
- 即自动创建NSKVONotifying_Person子类中,并重写属性的set方法如下:
-(void)setAge:(int)age{
NSLog(@"返回改变前的值为%d",age);
_age = age;
NSLog(@"返回改变后的值为%d",age);
}