关于DispatchTime和DispatchWallTime
先看以下代码,正常来说执行效果是一样的,都是程序执行3后触发回调
// 使用 DispatchTime.now() 或 .now()
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3) {
print("This runs after 3 seconds from the current time")
}
// 使用 DispatchWallTime.now()
DispatchQueue.main.asyncAfter(wallDeadline: DispatchWallTime.now() + 3) {
print("This runs after 3 seconds from the current wall time")
}
实际效果比较:
-
DispatchTime.now() + 3
和.now() + 3
:都是计算相对延迟,使用当前时间作为基准,计算出程序执行时的未来时间。此时二者的效果是完全相同的。延迟 3 秒,程序都会在当前时刻之后的 3 秒执行任务。 -
DispatchWallTime.now() + 3
:这也会计算出从当前系统时间开始的一个延迟任务,但它使用的是基于墙钟时间(例如考虑到手动修改系统时间或夏令时变化等)的方式。
简单说,DispatchWallTime会计算出一个具体的时间点,只有系统时钟到了那个点才会执行。比如程序执行后,我把系统时间给改了,那他就不是3s后执行,而是需要加上时间变化的差值
所以,详细大多时候我们还是希望使用DispatchTime,而不是DispatchWallTime