asyncAfter без времени кажется задержкой - Swift - PullRequest
0 голосов
/ 01 июня 2018

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

Код с асинхронностью:

DispatchQueue.main.asyncAfter(deadline: .now() + 0.0 , execute: {
    self.updateUI()
})

Нормальный код:

self.updateUI()

Аналогичная проблема и с селектором выполнения.

self.performSelector("onFlip", withObject: nil, afterDelay: 0)

Эта задержка вызвана из-за создания нового потока?

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

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

Вы отправили блок кода для запуска в основной очереди, поэтому пройдет некоторое время, прежде чем runloop сможет выполнить этот код;особенно если asyncAfter вызывается в главном потоке.

0 голосов
/ 01 июня 2018

Это ожидается.

DispatchQueue.main.asyncAfter(deadline: .now() + 0.0 , execute: {
    self.updateUI()
})

По сути то же самое, что и

DispatchQueue.main.async {
    self.updateUI()
}

, что также не будет выполнено немедленно из-за того, что вы отправляете код в основной поток асинхронно .Из-за асинхронной отправки код внутри замыкания не будет выполнен немедленно, только на следующем цикле выполнения main, что может привести к измеримой задержке.

...