程序员的自我修养

GCD之dispatch_after

2017-05-08  本文已影响18人  yehkong

序言:经常需要在等待一定时间后,执行代码块。但是需要注意的是,dispatch_after不是在指定的时间后执行代码块,而是在指定的时间追加处理到dispatch queue,因为还有可能有大量的其他追加或者系统本身的原因,这个时间往往比指定的时间更长,所以严格来讲,dispatch_after是大致延时处理。

使用的方法如下:

Snip20170510_2.png

xcode中的code snippet是这样的,也是最经常的用法,只需填入具体的秒数,即可添加处理代码。

  1. dispatch_time函数使用简单,上面截图就是构造方法,这里就不继续扒了。
    2.1. dispatch_walltime函数由POSIX中使用的struct timespec
    类型的时间得到dispatch_time_t类型的值。
    2.2 struct timespec类型的时间可以很轻松地通过NSDate类对象得到。
    2.3 NSDate转struct timespec类型代码如下:

dispatch_time_t getDispatchTimeFromDate(NSDate *date)
{
NSTimeInterval interval = [date timeIntervalSince1970];
double second,subsecond;
subsecond = modf(interval, &second);
struct timespec time;
time.tv_sec = second;
time.tv_nsec = subsecond * NSEC_PER_SEC;
dispatch_time_t mileStone = dispatch_walltime(&time, 0);
return mileStone;
}

附上 struct timespec定义

ifndef _STRUCT_TIMESPEC

define _STRUCT_TIMESPEC struct timespec

_STRUCT_TIMESPEC
{
__darwin_time_t tv_sec;
long tv_nsec;
};

endif

上一篇 下一篇

猜你喜欢

热点阅读