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

Is it safe to use Interface Builder bindings to observe properties changed on non-main thread?

如果我使用 Interface Builder 进行绑定,例如NSTextField 的值变为 someObject.property 而这个 属性 (假设它是 assign, atomic 类型)将从非主线程更改,这会是 safe/correct 吗?

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

如果我自己触发 KVO 通知,是否同样适用?

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

NSTextField 是否会观察到 属性 仍会在主线程上自行更新?


(与 相关)

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