iOS - произойдет ли сбой приложения после записи кода обновления пользовательского интерфейса в фоновом потоке - PullRequest
0 голосов
/ 21 октября 2018

Если я случайно напишу код обновления пользовательского интерфейса в фоновом потоке после извлечения данных из сетевого запроса.Будет ли сбой моего приложения?

Ответы [ 3 ]

0 голосов
/ 21 октября 2018

Прямой ответ: Ваше приложение не будет аварийно завершено.

Обновление пользовательского интерфейса должно быть выполнено в главной теме

Документация Apple:

DispatchQueue управляет выполнением рабочих элементов.Каждый рабочий элемент, отправленный в очередь, обрабатывается в пуле потоков, управляемых системой.

Итак, используйте

DispatchQueue.main.async {
        //your UI code
}
0 голосов
/ 23 октября 2018

Из документов Apple:

Обновление пользовательского интерфейса в потоке, отличном от основного, является распространенной ошибкой, которая может привести к пропущенным обновлениям пользовательского интерфейса, визуальным дефектам, повреждению данных и сбоям. source

Так что может аварийно завершить работу, но также не может завершиться аварийно.Это может обновить интерфейс или нет.Это может произойти сбой сразу при вызове кода;это может произойти сбой в следующем цикле выполнения или может произойти сбой через несколько минут.Это может вызвать странный интерфейс, который заставляет вас говорить WTF.Короче говоря, его поведение не определено.То, что делает, может усложнить поиск и исправление ошибки.

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

0 голосов
/ 21 октября 2018

Почему вы хотите обновить пользовательский интерфейс в фоновом потоке?это плохая практика.Вы получите что-то вроде этого: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...