Я понял, что есть разница между использованием DispatchQueue.main.asyncAfter(deadline: .now())
и perform(_:with:afterDelay:0)
, когда основная очередь занята.
Обратите внимание, что perform(_:with:afterDelay:)
вызывается из основной очереди в моей ситуации.
Похоже, DispatchQueue.main.asyncAfter(deadline: .now())
выполняет задачу немедленно в следующем цикле выполнения, не заботясь о главной очереди, но perform(_:with:afterDelay:)
с задержкой 0 будет ожидать и выполнять задачу только тогда, когда основная очередь «свободна» (возможно, это не будет вызывается при следующем цикле выполнения).
Согласно документу Apple для выполнить (_: with: afterDelay:)
Задание задержки 0 не обязательно приводит к немедленному выполнению селектора. Селектор все еще находится в очереди в цикле выполнения потока и выполняется как можно скорее.
Я не уверен, что понимаю их правильно, поэтому кто-нибудь может мне помочь объяснить, в чем разница между ними? Что означает выполнено как можно скорее означает?
Я нашел такой же вопрос здесь , но похоже, что это не то, что я хочу.