dispatch_time_t 的创建

开发中常用到GCD方法dispatch_after(<#dispatch_time_t when#>, <#dispatch_queue_t _Nonnull queue#>, <#^(void)block#>) 方法进行延迟处理

一般在主线程中我们不能用sleep来进行延迟,所以用dispatch_after是最合适的。dispatch_after能让我们添加进队列的任务延时执行,这个函数并不是在指定时间后执行处理,而只是在指定时间后追加处理到dispatch_queue队列中执行。

OC中为dispatch_time_t提供了两种构造方法

dispatch_time(dispatch_time_t when, int64_t delta)
dispatch_walltime(const struct timespec *_Nullable when, int64_t delta)

① 用法

dispatch_time_t time_t = dispatch_time(DISPATCH_TIME_NOW, 10* NSEC_PER_SEC);

dispatch_time_t when 系统提供两种定义如下

#define DISPATCH_TIME_NOW (0ull)
#define DISPATCH_TIME_FOREVER (~0ull)

②用法

dispatch_time_t time_t = dispatch_walltime(DISPATCH_TIME_NOW, 100* NSEC_PER_USEC)

二者的区别

  • 当设备进入睡眠状态时,dispatch_time将停止运行,而dispatch_walltime可以继续运行。因此,如果您想在20分钟后完成一个指定操作,但是在5分钟时您的设备进入休眠状态并休眠10分钟,dispatch_walltime将从现在开始执行20分钟,即在计算机醒来后5分钟执行。dispatch_time将在设备醒来10分钟后执行。(即:设备休眠不会对dispatch_walltime计时产生影响,二会对dispatch_time产生影响,延长相应休眠时间。)

  • dispatch_time得到的时间长度是相对设备运行时间,即设备运行时才计时;而dispatch_walltime设定的时间段是绝对的,与设备是否运行无关;

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容