Multithreading 使用Interface Builder绑定观察非主线程上更改的属性是否安全?

Multithreading 使用Interface Builder绑定观察非主线程上更改的属性是否安全?,multithreading,cocoa,key-value-observing,cocoa-bindings,Multithreading,Cocoa,Key Value Observing,Cocoa Bindings,如果我使用Interface Builder绑定,例如,NSTextField的值到someObject.property,并且该属性(假设它是assign,atomic类型)将从非主线程更改,这是否安全/正确 Cocoa通常禁止从非主线程更新UI,因此我想知道绑定机制是否会自动安排更新在主线程上发生,或者直接绑定到可能从其他线程更改的对象是否不安全 如果我自己触发KVO通知,是否同样适用 -(void)setProperty: { dispatch_async(dispatch_get

如果我使用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
是否仍会在主线程上更新自身



(与之相关)

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

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

不,不是。重新思考你的体系结构(阅读布伦特·西蒙斯的优秀博客系列:)不,不是。重新思考你的体系结构(阅读布伦特·西蒙斯的优秀博客系列:)哦,糟糕!我必须重新构建我的应用程序:(哦,糟糕!我必须重新构建我的应用程序:(