KVO 后台线程

10

如果我在主线程上设置了kvo观察者,但是在后台线程上更改了被观察属性的值,无论主线程处于何种状态,它都会立即中断吗?

谢谢!

2个回答

14

如果我在主线程上设置kvo观察者......

使用哪个线程来设置KVO观察者都是无关紧要的。KVO观察者将在值更改所在的线程上调用回调函数。

我再次强调 - KVO不会为您管理线程安全!

接待员模式旨在解决此问题。

https://developer.apple.com/library/ios/documentation/general/conceptual/CocoaEncyclopedia/ReceptionistPattern/ReceptionistPattern.html

请勿尝试在observeValueForKeyPath:ofObject:change:context:中仅使用GCD切换线程,而没有中介对象,否则您可能会遇到针对dealloc的竞争条件(参见“Deallocation Problem”-https://developer.apple.com/library/ios/technotes/tn2109/_index.html#//apple_ref/doc/uid/DTS40010274-CH1-SUBSECTION11)。


2

不,您的主线程不会被中断,就像您2分钟前发布的问题一样。

唯一真正会中断线程的方式是程序接收到一个信号。这通常只会在出现严重问题时发生。(如SIGSEGV、SIGABRT等)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接