2016-02-02 2 views
0

Если я правильно понимаю, UIView можно редактировать только из основного потока, потому что мы хотим избежать проблем с синхронизацией. Тогда почему, когда вызывается из вторичной нити, она иногда работает, а иногда нет? (скажем, я хочу изменить цвет фона ... он работает примерно каждые 40 секунд). Почему он не работает, и все же он не вызывает никаких ошибок?Почему манипуляция UIView на вторичном потоке не вызывает ошибку?

ответ

1

Метод UIKit (скорее всего) не проверяет, какой поток они выполняют. Если вы вызываете эти методы в другом потоке, вы получаете неопределенное поведение. То, что он работает «иногда», не является доказательством обратного - вместо этого очевидно, что вы получаете именно это: неопределенное поведение.

+0

ОК, теперь я понимаю :) Не могли бы вы объяснить, как могло возникнуть это неопределенное поведение? то почему это происходит в этом случае? Может быть, из-за какого-то состояния гонки? – Novellizator

+0

@ Новеллизатор Да, это связано с расчетом данных и другими явлениями, возникающими при одновременном доступе нескольких потоков к объектам UIKit. – CouchDeveloper

Смежные вопросы