如果我使用Interface Builder绑定,例如NSTextField
对someObject.property
的值和此属性(假设它是assign, atomic
类型)将从非主线程更改,这是安全/正确的吗?
Cocoa通常禁止从非主线程更新UI,所以我想知道绑定机制是否自动调度主线程上发生的更新,或者直接绑定到可能从其他线程更改的对象是不安全的。
如果我自己发送KVO通知,是否也适用?
-(void)setProperty: {
dispatch_async(dispatch_get_global_queue(0,0), ^{
[self willChangeValueForKey:@"property"];
…
[self didChangeValueForKey:@"property"];
});
}
NSTextField
观察该属性是否仍会在主线程上自行更新?
答案 0 :(得分:2)
这不安全。 KVO和Bindings都没有将内容重定向到主线程。如果在后台线程上更改观察到的属性,则会在该后台线程上通知观察者。如果观察者对更改通知的响应是更新UI,那么您就遇到了问题。