0

Если я использую Interface Builder для связывания, например. NSTextField значение someObject.property, и это свойство (при условии, что это assign, atomic тип) изменится с основной темы, это будет безопасно/правильно?Безопасно ли использовать привязки интерфейса Builder для наблюдения за изменениями свойств, которые не были изменены?

Какао обычно запрещает обновление пользовательского интерфейса из не основной темы, поэтому я задаюсь вопросом, автоматически ли механизм привязки автоматически обновляет обновления для основного потока, или небезопасно напрямую связываться с объектами, которые могут быть изменены из других потоков ,

То же самое верно, если я сама запускаю уведомления KVO?

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

выйдет NSTextField заметив, что свойство по-прежнему обновляться в главном потоке?


(связанные с problems I'm seeing with waitUntilExit)

+0

Нет, это не так. Переосмыслите свою архитектуру (и прочитайте эту замечательную серию блога блога Брент Симмонс: http://inessential.com/2015/05/22/how_not_to_crash_4_threading) – cacau

ответ

2

Это не безопасно. Ни KVO, ни Bindings не перенаправляют вещи в основной поток. Если вы измените наблюдаемое свойство на фоновом потоке, наблюдатель будет уведомлен об этом фоновом потоке. Если ответ наблюдателя на уведомление об изменении заключается в обновлении пользовательского интерфейса, у вас возникнет проблема.

+0

О, облом! Мне нужно перестроить мое приложение :( – Kornel