美文网首页iOS-OC中级
dispatch_time_t 的创建

dispatch_time_t 的创建

作者: 跃文 | 来源:发表于2019-08-14 12:32 被阅读0次

    开发中常用到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设定的时间段是绝对的,与设备是否运行无关;

    相关文章

      网友评论

        本文标题:dispatch_time_t 的创建

        本文链接:https://www.haomeiwen.com/subject/uaxgjctx.html