🌟KVO的全称是Key-Value Observing,俗称“键值监听”,可以用于监听某个对象属性的改变
![](https://img.haomeiwen.com/i4349235/c4adbf0f6f676b93.png)
🌟未使用KVO监听的对象
![](https://img.haomeiwen.com/i4349235/561f2798111f43f7.png)
🌟使用了KVO监听的对象
![](https://img.haomeiwen.com/i4349235/65d81d3fc70d43a8.png)
🌟_NSSetIntValueAndNotify(_NSSet*ValueAndNotify)的内部实现:
- (void)setAge:(int)age
{
_NSSetIntValueAndNotify();
}
// 伪代码
void _NSSetIntValueAndNotify()
{
[self willChangeValueForKey:@"age"];
[super setAge:age];
[self didChangeValueForKey:@"age"];
}
- (void)didChangeValueForKey:(NSString *)key
{
// 通知监听器,某某属性值发生了改变
[oberser observeValueForKeyPath:key ofObject:self change:nil context:nil];
}
🌟调用willChangeValueForKey
🌟调用原来的setter实现
🌟调用didChangeValueForKey:
didChangeValueForKey:内部会调用oberser的observeValueForKeyPath:ofObject change:方法
网友评论