关于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")
}

实际效果比较:

  1. DispatchTime.now() + 3.now() + 3:都是计算相对延迟,使用当前时间作为基准,计算出程序执行时的未来时间。此时二者的效果是完全相同的。延迟 3 秒,程序都会在当前时刻之后的 3 秒执行任务。

  2. DispatchWallTime.now() + 3:这也会计算出从当前系统时间开始的一个延迟任务,但它使用的是基于墙钟时间(例如考虑到手动修改系统时间或夏令时变化等)的方式。

简单说,DispatchWallTime会计算出一个具体的时间点,只有系统时钟到了那个点才会执行。比如程序执行后,我把系统时间给改了,那他就不是3s后执行,而是需要加上时间变化的差值

所以,详细大多时候我们还是希望使用DispatchTime,而不是DispatchWallTime

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值