(iphone) что не следует делать в фоновом потоке по отношению к UIView?

#iphone #uiview #background-thread

#iPhone #uiview #фоновый поток

Вопрос:

Я знаю и слышал, что большинство связанных с пользовательским интерфейсом не должно выполняться в потоке, отличном от основного.
Я также знаю, что вы можете обновить элемент данных, не связанный с представлением (который вы добавили) производного класса UIView.

Интересно, подходят ли приведенные ниже операции для выполнения в фоновом потоке.

  1. выделение UIView
  2. инициализировать UIView с / без (CGRectZero или просто инициализировать) информацией о фрейме
  3. изменение свойства frame / image (UIImageView) в UIView
  4. изменение свойства изображения производного класса NSObject. (обработка UIImage как данных)
  5. доступ к подвидам с помощью метода subviews
  6. и т.д.. Существует ли четко определенная документация по этому вопросу?

Спасибо

Ответ №1:

Вы не должны делать ничего, связанного с просмотром, в фоновом потоке. Все перечисленные вами элементы не должны выполняться в фоновом потоке. Если вы правильно разбиваете свое приложение на MVC, представление должно содержать только элементы, которые определяют способ его отображения. Таким образом, все, что относится к одному, должно быть только в основном потоке.

Все ваши манипуляции с данными должны выполняться в вашей модели. Это может быть потоковым по мере необходимости для производительности. Просто будьте осторожны, отправляя какие-либо сообщения для обновления пользовательского интерфейса для обработки данных в основном потоке. Сюда входят уведомления. Они отправляются в том же потоке, в котором они были созданы. Поэтому легко забыть переключиться в MainThread при отправке.

Комментарии:

1. спасибо за ответ, разве # 4 не подходит? определяю UIImage * как член моего пользовательского класса и устанавливаю / получаю переменную из другого потока.

2. Да, это так. Извините, я неправильно истолковал UIImage как UIImageView. Можно сделать что-то вроде чтения в изображении и выполнить некоторую обработку над ним в фоновом потоке, а затем передать его в основной поток для отображения. Просто убедитесь, что используемые вами библиотеки обработки изображений также потокобезопасны.