#iphone #uiview #background-thread
#iPhone #uiview #фоновый поток
Вопрос:
Я знаю и слышал, что большинство связанных с пользовательским интерфейсом не должно выполняться в потоке, отличном от основного.
Я также знаю, что вы можете обновить элемент данных, не связанный с представлением (который вы добавили) производного класса UIView.
Интересно, подходят ли приведенные ниже операции для выполнения в фоновом потоке.
- выделение UIView
- инициализировать UIView с / без (CGRectZero или просто инициализировать) информацией о фрейме
- изменение свойства frame / image (UIImageView) в UIView
- изменение свойства изображения производного класса NSObject. (обработка UIImage как данных)
- доступ к подвидам с помощью метода subviews
- и т.д.. Существует ли четко определенная документация по этому вопросу?
Спасибо
Ответ №1:
Вы не должны делать ничего, связанного с просмотром, в фоновом потоке. Все перечисленные вами элементы не должны выполняться в фоновом потоке. Если вы правильно разбиваете свое приложение на MVC, представление должно содержать только элементы, которые определяют способ его отображения. Таким образом, все, что относится к одному, должно быть только в основном потоке.
Все ваши манипуляции с данными должны выполняться в вашей модели. Это может быть потоковым по мере необходимости для производительности. Просто будьте осторожны, отправляя какие-либо сообщения для обновления пользовательского интерфейса для обработки данных в основном потоке. Сюда входят уведомления. Они отправляются в том же потоке, в котором они были созданы. Поэтому легко забыть переключиться в MainThread при отправке.
Комментарии:
1. спасибо за ответ, разве # 4 не подходит? определяю UIImage * как член моего пользовательского класса и устанавливаю / получаю переменную из другого потока.
2. Да, это так. Извините, я неправильно истолковал UIImage как UIImageView. Можно сделать что-то вроде чтения в изображении и выполнить некоторую обработку над ним в фоновом потоке, а затем передать его в основной поток для отображения. Просто убедитесь, что используемые вами библиотеки обработки изображений также потокобезопасны.