UIKit iOS не является потокобезопасным, назовем этот факт хорошо известный. Я знаю правило, я осторожен, но меня все равно кусают - и время от времени возникающий сбой достаточно удален от оскорбительного фонового вызова в UIKit, чтобы отследить проблему было менее чем радостно.
Эта проблема кажется легко решаемой — пусть классы/методы UIKit предупреждают, когда они вызываются из фонового потока, по крайней мере, в качестве функции отладки. Насколько я знаю, iOS не предоставляет такой функции. Конечно, того же эффекта можно было бы добиться и вручную, если бы таким вызовам предшествовала некоторая форма утверждений, но это решение не самое элегантное и, кроме того, страдает той же слабостью, что и исходная проблема, а именно тем, что программисты склонны к забывчивости.
Есть ли у кого-нибудь более элегантное решение? Как вы решаете эту проблему в своих проектах?
(Примечание: этот вопроссвязан, но не так явно. Остается задаться вопросом)
ОБНОВЛЕНИЕ: ответ Эндрю — это решение, которое я искал в то время, однако обратите внимание, что, по крайней мере, с Xcode 9 это теперь предоставляется xcode/ios. Например, добавление этого кода:
DispatchQueue.global().async {
print(self.view.frame)
}
Метод viewDidLoad UIView создает встроенное в Xcode предупреждение во время выполнения UIView.frame должен использоваться только из основного потокаи на консоль выводится сообщение: Средство проверки основного потока: UI API вызывается в фоновом потоке: -[UIView frame]