КВО фоновые темы - PullRequest
       7

КВО фоновые темы

4 голосов
/ 06 февраля 2012

Если я настраиваю наблюдателей kvo в моем основном потоке, но затем в фоновом потоке я изменяю значение наблюдаемого свойства, мой основной поток прерывается немедленно, независимо от того, где он был?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 10 июля 2014

«Если я настрою наблюдателей kvo в своем основном потоке ...»

Не имеет значения, какой поток вы использовали для настройки наблюдателя KVO.Наблюдатель KVO будет вызван обратно в поток, в котором значение было изменено.

Я не могу не подчеркнуть это достаточно - KVO не управляет безопасностью потока для вас!

Шаблон Receptionistпредназначен для решения этой проблемы.

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

Не пытайтесь просто переключать потоки с помощью GCD в Наблюдение за ValForForKeyPath: ofObject: change: context: без промежуточного объекта, иначе вы, скорее всего, столкнетесь с условием гонки против dealloc(см. «Проблема выделения ресурсов» - https://developer.apple.com/library/ios/technotes/tn2109/_index.html#//apple_ref/doc/uid/DTS40010274-CH1-SUBSECTION11)

2 голосов
/ 06 февраля 2012

Нет, ваш основной поток не будет прерван, как в случае с вопросом, который вы разместили 2 минуты назад.

Единственный способ, которым поток действительно будет прерван, это когда программа получит сигнал.Обычно это происходит только в том случае, если что-то идет не так.(SIGSEGV, SIGABRT и т. Д.)

...