首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS,为什么observeValueForKeyPath:是同步的

iOS,为什么observeValueForKeyPath:是同步的
EN

Stack Overflow用户
提问于 2018-04-24 10:48:14
回答 1查看 185关注 0票数 0

今天我发现KVO回调函数- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context是同步函数,示例:

首先,我添加观察者:

代码语言:javascript
复制
[self addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew context:nil];

第二,我设置了回调:

代码语言:javascript
复制
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
    NSLog(@"keyPath->%@",keyPath);
    sleep(3);
}

第三,我更改了age

代码语言:javascript
复制
self.age = @"12312";
NSLog(@"postEnd");

然后记录日志

代码语言:javascript
复制
keyPath->age
//after 3 seconds 
postEnd

为什么在日志postEnd之后3秒

EN

回答 1

Stack Overflow用户

发布于 2018-04-24 12:00:13

键值观察始终发生在发生更改的线程上,并且始终是同步的。这意味着您可以控制线程,但您也知道,当您的代码完成设置值时,所有的观察都已经完成。

有关KVO的更多细节和更多信息,请参阅KVO上的this article

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49992710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档