gpt4 book ai didi

multithreading - 使用 Interface Builder 绑定(bind)来观察非主线程上更改的属性是否安全?

转载 作者:行者123 更新时间:2023-12-03 17:38:08 24 4
gpt4 key购买 nike

如果我使用 Interface Builder 进行绑定(bind),例如NSTextField 的值为 someObject.property 并且此属性(假设它是 assign,atomic 类型)将从非主线程更改,将这安全/正确吗?

Cocoa 通常禁止从非主线程更新 UI,所以我想知道绑定(bind)机制是否自动为我安排在主线程上发生更新,或者直接绑定(bind)到可能从其他线程更改的对象是否不安全。

如果我自己触发 KVO 通知,同样的情况也适用吗?

-(void)setProperty: {
dispatch_async(dispatch_get_global_queue(0,0), ^{
[self willChangeValueForKey:@"property"];

[self didChangeValueForKey:@"property"];
});
}

观察该属性的 NSTextField 是否仍会在主线程上更新自身?

<小时/>

(与 problems I'm seeing with waitUntilExit 相关)

最佳答案

这不安全。 KVO 和 Bindings 都不会将事物重定向到主线程。如果您更改后台线程上的观察者属性,则会在该后台线程上通知观察者。如果观察者对更改通知的响应是更新 UI,那么您就会遇到问题。

关于multithreading - 使用 Interface Builder 绑定(bind)来观察非主线程上更改的属性是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35002943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com