1、KVC setValue: forKeyPath:
的实现原理
未命名文件.png
2、KVC操作能不能触发KVO的监听
@interface Person : NSObject
{
@public
int _age;
}
@end
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
Person *per = [[Person alloc] init];
[per addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
[per setValue:@10 forKeyPath:@"age"];
[per removeObserver:self forKeyPath:@"age"];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
{
NSLog(@"keyPath = %@ %@",keyPath,change);
}
可以触发<满足KVC的任何一种方式都可以触发>,可能调用KVC的时候内部触发了
[per willChangeValueForKey:@"age"];
per->_age = 123;
[per didChangeValueForKey:@"age"];
触发KVO
网友评论