繁体   English   中英

iOS,为什么observeValueForKeyPath:是同步的

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM