美文网首页iOS 多线程网络部分
GCD中的dispatch_after使用说明

GCD中的dispatch_after使用说明

作者: 山水域 | 来源:发表于2017-05-08 16:19 被阅读4316次

dispatch_after解说

dispatch_after是来延迟执行的GCD方法,因为在主线程中我们不能用sleep来延迟方法的调用,所以用dispatch_after是最合适的

dispatch_after能让我们添加进队列的任务延时执行,该函数并不是在指定时间后执行处理,而只是在指定时间追加处理到dispatch_queue

代码实现


//该方法的第一个参数是time,第二个参数是dispatch_queue,第三个参数是要执行的block。
    //在主线程中延迟执行
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(6 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        
    });

特别注意

上面这句dispatch_after的真正含义是在6秒后把任务添加进队列中,并不是表示在6秒后执行,大部分情况该函数能达到我们的预期,只有在对时间要求非常精准的情况下才可能会出现问题。

参数dispatch_time_t解析

dispatch_time_t有两种形式的构造方式,第一种相对时间:通过dispatch_time函数。第二种是绝对时间,通过dispatch_walltime函数来获取,其需要使用一个timespec的结构体来得到dispatch_time_t。


dispatch_time(<#dispatch_time_t when#>, <#int64_t delta#>)

//DISPATCH_TIME_NOW表示现在,NSEC_PER_SEC表示的是秒数,它还提供了NSEC_PER_MSEC表示毫秒
dispatch_time_t time=dispatch_time(DISPATCH_TIME_NOW, 10*NSEC_PER_SEC);

dispatch_walltime(<#const struct timespec * _Nullable when#>, <#int64_t delta#>)

//要使用一个timespec的结构体
dispatch_walltime(<#const struct timespec * _Nullable when#>, <#int64_t delta#>)
dispatch_time_t time_w = dispatch_walltime(DISPATCH_TIME_NOW, 3 * NSEC_PER_SEC);

NSLog(@"——————————————————————————");
    //在主线程中延迟执行
    dispatch_after(time_w, dispatch_get_main_queue(), ^{
        NSLog(@"=======================");
    });

解析dispatch_time和dispatch_walltime

dispatch_time stops running when your computer goes to sleep. dispatch_walltime continues running. So if you want to do an action in one hour minutes, but after 5 minutes your computer goes to sleep for 50 minutes, dispatch_walltime will execute an hour from now, 5 minutes after the computer wakes up. dispatch_time will execute after the computer is running for an hour, that is 55 minutes after it wakes up.
dispatch_time得到的时间长度是相对的,与设备running时间相关,即设备运行时才计时;而dispatch_walltime设定的时间段是绝对的,与设备是否running无关;

相关文章

  • GCD中的dispatch_after使用说明

    dispatch_after解说 dispatch_after是来延迟执行的GCD方法,因为在主线程中我们不能用s...

  • dispatch_after

    dispatch_after属于GCD,能够实现延迟执行的语法,或者说是GCD中延迟执行的函数。使用dispatc...

  • iOS dispatch_after

    dispatch_after是来延迟执行的GCD方法,dispatch_after能让我们添加进队列的任务延时执行...

  • 线程篇之GCD

    本篇是是Objective-C 高级编程中多线程GCD部分 笔记. dispatch_after dispatch...

  • JSPatch 学习二 -- 基础用法(3)

    8. GCD 使用 dispatch_after() ;dispatch_async_main() ;dispat...

  • GCD 总结(一)

    1.延时操作 GCD dispatch_after() 优点:写起来方便,直观 ...

  • GCD中dispatch_after的使用

    dispatch_after是GCD的一个延迟执行的方法,能让我们添加进队列的任务延时执行,该函数并不是在指定时间...

  • 延迟调用方法总结

    延迟调用自己代理的方法: //GCD延迟dispatch_after(dispatch_time(DISPATCH...

  • GCD简单使用

    基础使用 GCD的延时执行方法 dispatch_after GCD的一次性代码(只执行一次) dispatch_...

  • iOS中的延迟执行

    总结一下iOS中常用的集中延迟执行的方案: GCD dispatch_after函数 可以实现延时为某个队列中添加...

网友评论

    本文标题:GCD中的dispatch_after使用说明

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