美文网首页iOS 小册iOS DeveloperOC
GCD 之延后执行(dispatch_after)

GCD 之延后执行(dispatch_after)

作者: fuyoufang | 来源:发表于2016-12-01 23:50 被阅读821次

    dispatch_after 延后执行

    • Object-C
      dispatch_after 只是延时提交 block,不是延时立刻执行。

      // oc
      dispatch_time_t delayInSeconds = dispatch_time(DISPATCH_TIME_NOW,(int64_t)(5 * NSEC_PER_SEC));
      dispatch_after(delayInSeconds, dispatch_get_main_queue(), ^{
           //.....
      });
      

      上述代码中的 delayInSeconds 参数为延长到的时间点,函数原型为:

      dispatch_time_t dispatch_time( dispatch_time_t when, int64_t delta );
      

      dispatch_time_t 中第一个参数为 when 表示某个时间点,可以用 DISPATCH_TIME_NOW 表示当前时间点;第二个参数的 delta 表示相对第一个时间点加上的纳秒数。一秒对应的109纳秒(ns)。系统提供了一些宏来简化。

       #define NSEC_PER_SEC 1000000000ull //每秒(sec)对应的纳秒(nses)
       #define NSEC_PER_MSEC 1000000ull //每毫秒(msec)对应的纳秒(nses)
       #define USEC_PER_SEC 1000000ull    //每秒(sec)有多少微秒(usec)
       #define NSEC_PER_USEC 1000ull      //每微秒(usec)对应的微妙(nsec)
      

      在当前时间上延迟一秒,可以用如下方法获得时间点,

      dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC);
      dispatch_time(DISPATCH_TIME_NOW, 1000 * USEC_PER_SEC);
      dispatch_time(DISPATCH_TIME_NOW, USEC_PER_SEC * NSEC_PER_USEC);
      
    • swift 3.0

      // swift 3.0
      // 延迟时间
      var deadline: DispatchTime = DispatchTime.now() + DispatchTimeInterval.microseconds(200)
      DispatchQueue.main.asyncAfter(deadline: deadline, execute: {
          //......          
      })
      

    相关文章

      网友评论

        本文标题:GCD 之延后执行(dispatch_after)

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