KVO背景线程

时间:2012-02-06 01:32:00

标签: objective-c multithreading key-value-observing

如果我在主线程上设置了kvo观察者,但是在后台线程上我改变了被观察属性的值,我的主线程是否会立即中断,无论它在哪里?

谢谢!

2 个答案:

答案 0 :(得分:5)

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

与您用于设置KVO观察者的线程无关。 KVO观察者将在更改值的线程上回调。

我不能强调这一点--KVO不会为您管理线程安全!

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

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

不要尝试在observeValueForKeyPath中使用GCD切换线程:ofObject:change:context:没有中间对象,否则你最终可能会遇到针对dealloc的竞争条件(参见“释放问题” - {{3} })

答案 1 :(得分:2)

没有你的主线程不会被打断,就像你在2分钟前发布的问题一样。

线程真正被中断的唯一方法是程序接收信号。这通常只会在事情出错的情况下发生。 (SIGSEGV,SIGABRT等)