Предупреждение о вызовах UIKit из фоновых потоков

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]

9
задан Amos Joshua 20 September 2017 в 11:07
поделиться