Нужно ли обновлять интерфейс в основном потоке или в основной очереди? - PullRequest
0 голосов
/ 05 июля 2018

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

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

Ответы [ 4 ]

0 голосов
/ 18 июля 2018

Из Очереди отправки в Руководстве по программированию параллелизма:

Основная очередь отправки

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

Как правило, GCD поддерживает пул потоков, а 1-1 отсутствует связь между очередями отправки и потоками. Но главная очередь является особенным: он привязан к основному потоку, все элементы отправлены до основной очереди выполняются в основном потоке. (То же самое верно для OperationQueue.main.)

Отправка кода на DispatchQueue.main (или OperationQueue.main) гарантирует, что он выполняется в главном потоке и синхронизируется с другие обновления пользовательского интерфейса.

В этом смысле термины «выполнить в главном потоке» и «Выполнить в главной очереди» часто используются взаимозаменяемо.

0 голосов
/ 05 июля 2018

// основной поток

DispatchQueue.main.async
{ 
 //eg. 
 tableview.reloadData()
  // here you update your UI.
}
0 голосов
/ 18 июля 2018

Представьте себе железнодорожную станцию, где номер поезда совпадает с номером платформы, с которой он отправляется.

Итак, если вы хотите поезд № 1, вы стоите на платформе № 1. Вы не можете сесть в поезд, не стоя на платформе. Все остальные, кто хочет сесть в этот поезд, тоже стоят на платформе, чтобы дождаться своего шанса сесть в поезд.

Поезд - это нить. Платформа является очередью.

Если вы хотите попасть в основной поток, попадайте в основную очередь.

0 голосов
/ 05 июля 2018

DispatchQueue управляет выполнением кода в определенном потоке.

Из документации Apple:

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

Итак, когда вы звоните

DispatchQueue.main.async {
        //your code
}

Этот код отправляется в очередь main, которая, в свою очередь, выполняется в главном потоке.

...