[英]iOS , why observeValueForKeyPath: is sync
今天,我发现了KVO回调函数- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
是同步函数,例如:
首先,我添加观察者:
[self addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew context:nil];
其次,我设置回调:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
NSLog(@"keyPath->%@",keyPath);
sleep(3);
}
第三,我改变age
:
self.age = @"12312";
NSLog(@"postEnd");
然后登录
keyPath->age
//after 3 seconds
postEnd
为什么在日志postEnd
后3秒?
键值观察始终发生在发生更改的线程上,并且始终是同步的。 这意味着您可以控制线程,但是您也知道在设置值的代码完成时所有观察已完成。
有关KVO的更多详细信息和更多信息,请参见本文 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.