Я думаю, вы упускаете смысл асинхронных действий.И комментарий @ RobertRyan о том, что обновления пользовательского интерфейса не отображаются быстро, если он выполняется во вторичных очередях, неверен.Все обновления пользовательского интерфейса должны выполняться в главной очереди.Period.
Но вернемся к GCD и асинхронной очереди.@Sven прав, что вы не можете изменить приоритет очередей отправки.Очереди в GCD работают по принципу FIFO («первым пришел - первым обслужен»), поэтому порядок, в котором вы их ставите в очередь, соответствует порядку, в котором они выполняются. Это часть того, почему использование GCD поточно-ориентировано;вы гарантированно не столкнетесь ни с какими проблемами из-за этого приоритета очереди FIFO.Второе, что нужно понять, это то, что когда вы отправляете очередь в очередь, ОС не дает никаких гарантий того, когда эта очередь будет обработана.Это процесс типа «установи и забудь».Если вам нужно знать, когда очередь завершает обработку, вам нужно настроить обработчик блока завершения (вы заметите, что многие из фреймворков Apple начали реализовывать это), чтобы получить уведомление об этом.Вот почему Apple предлагает вложить в свой первый вызов dispatch_async вызов dispatch_async и запросить основной поток для обновлений пользовательского интерфейса.Таким образом, ваш код будет выглядеть примерно так:
dispatch_async(q, ^{
[self performHeavyCalculations];
dispatch_async(dispatch_get_main_queue, ^{
// some UI updates
});
});
Из-за того, как GCD ставит в очередь и удаляет из очереди, асинхронная отправка обновлений вашего пользовательского интерфейса обратно в основную очередь позволит обновлениям пользовательского интерфейса происходить без ощутимой задержки дляпользователь.Если ваши обновления пользовательского интерфейса зависят от результата executeHeavyCalculations, вам необходимо настроить обработчик завершения или схему делегирования, чтобы уведомить основную очередь о том, когда это будет завершено, чтобы обновления могли произойти.Если промежуток между вычислениями и обновлением слишком велик, вам может понадобиться изучить то, что вы делаете, в методе вычислений, который занимает так много времени.