n秒後に〇〇の処理を行うというようなプログラムを書く際,Timer.scheduledTimer
やDipatchQueue.main.asyncAfter
を使うことになると思いますが,この2つには処理タイミングにズレがあるようです.
-
Timer.scheduledTimer
はn秒後に(他の処理に割り込んででも)正確に処理が行われる -
DipatchQueue.main.asyncAfter
は最低n秒待ってから処理が行われる
つまり,Threadを指定して正確にn秒後にある処理をさせたい場合は,
Timer.scheduledTimer(withTimeInterval: 5.0, repeats: false) { (t) in
DispatchQueue.main.async {
// 処理
}
}
という風にTimerの中でThreadを指定してやる必要がありそうです.