dispatch_time_t 类型,它的创建有两个函数
1. dispatch_time(<#dispatch_time_t when#>, <#int64_t delta#>)第一个参数是从什么时间开始 , 一般直接传 DISPATCH_TIME_NOW; 表示从现在开始
第二个参数表示具体的时间长度 ( 不能直接传 int 或 float), 可以写成这种形式 (int64_t)3* NSEC_PER_SEC
#define NSEC_PER_SEC 1000000000ull 每秒有 1000000000 纳秒
#define NSEC_PER_MSEC 1000000ull 每毫秒有 1000000 纳秒
#define USEC_PER_SEC 1000000ull 每秒有 1000000 微秒
#define NSEC_PER_USEC 1000ull 每微秒有 1000 纳秒
注意 delta 的单位是纳秒 !
1 秒的写作方式可以是 1* NSEC_PER_SEC; 1000* NSEC_PER_MSEC; USEC_PER_SEC* NSEC_PER_USEC
2. dispatch_walltime(<#const struct timespec * _Nullable when#>, <#int64_t delta#>),
第一个参数是一个结构体 , 创建的是一个绝对的时间点 , 比如 2016 年 10 月 10 日 8 点 30 分 30 秒 , 如果你不需要自某一个特定的时刻开始 , 可以传 NUll, 表示自动获取当前时区的当前时间作为开始时刻 , 第二参数意义同第一个函数
dispatch_time_t time = dispatch_walltime(NULL, 5* NSEC_PER_SEC);
两个函数的不同
例如 : 从现在开始 ,1 小时之后是触发某个事件
使用第一个函数创建的是一个相对的时间 , 第一个参数开始时间参考的是当前系统的时钟 , 当 device 进入休眠之后 , 系统的时钟也会进入休眠状态 , 第一个函数同样被挂起 ; 假如 device 在第一个函数开始执行后 10 分钟进入了休眠状态 , 那么这个函数同时也会停止执行 , 当你再次唤醒 device 之后 , 该函数同时被唤醒 , 但是事件的触发就变成了从唤醒 device 的时刻开始 ,1 小时之后
而第二个函数则不同 , 他创建的是一个绝对的时间点 , 一旦创建就表示从这个时间点开始 ,1 小时之后触发事件 , 假如 device 休眠了 10 分钟 , 当再次唤醒 device 的时候 , 计算时间间隔的时间起点还是 开始时就设置的那个时间点 , 而不会受到 device 是否进入休眠影响