Дальнейшая документация и обсуждение содержатся в технической заметке, которая идет вместе с примером кода ListAdder. Это TN2109: «простая и надежная нарезка резьбы с помощью NSOperation». В нем неоднократно говорится об обновлении только элементов UIKit из основного потока и приводятся примеры правильных и неправильных реализаций. Вы можете найти дальнейшие ссылки на него, выполнив поиск «ограничение потока».

жение для iPad синхронизируется с фидом XML и выполняет синхронизацию в подклассе NSOperation, выполняемом из NSOperationQueue. Когда он анализирует канал, он перезванивает в главный поток черезperformSelectorOnMainThread:withObject:waitUntilDone: обновлять различные части пользовательского интерфейса, планировать загрузку и т. д. Некоторые из них довольно дороги; Пользовательский интерфейс иногда может перестать отвечать на запросы в течение одной или двух секунд во время синхронизации.

Чтобы сделать интерфейс более отзывчивым, я убрал использованиеperformSelectorOnMainThread:withObject:waitUntilDone: в пользу прямых вызовов для выполнения всех задач, связанных с синхронизацией, включая обновление пользовательского интерфейса. Так что теперь синхронизация происходит полностью в фоновом потоке, созданном NSOperationQueue. Кажется, это работает довольно хорошо, а пользовательский интерфейс гораздо быстрее реагирует на синхронизацию.

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

Так насколько важно обновить пользовательский интерфейс в главном потоке? Какие части приложения являются потокобезопасными, а какие нет? Возможно, есть ссылка, объясняющая, что безопасно выполнять в NSOperation и что должно выполняться только в основном потоке в iOS? Я действительно делаю что-то небезопасное или склонное к сбоям?

Ответы на вопрос(4)

Ваш ответ на вопрос