如果我使用Interface Builder进行绑定,例如NSTextField
的值为someObject.property
,此属性(假设它是assign, atomic
类型)将从非主线程更改,这是否安全/正确?使用Interface Builder绑定来观察在非主线程上更改的属性是否安全?
可可一般禁止从非主线程更新UI,所以我不知道绑定机制是否自动调度更新以在我的主线程上发生,还是不安全的直接绑定到可能从其他线程更改的对象。
如果我自己发出KVO通知,这同样适用吗?
-(void)setProperty: {
dispatch_async(dispatch_get_global_queue(0,0), ^{
[self willChangeValueForKey:@"property"];
…
[self didChangeValueForKey:@"property"];
});
}
将NSTextField
观察到该属性仍在主线程上更新自己?
(与problems I'm seeing with waitUntilExit
)
不,不是。重新思考你的建筑(并阅读Brent Simmons撰写的这篇优秀的博客文章系列:http://inessential.com/2015/05/22/how_not_to_crash_4_threading) – cacau