在指定时间后执行处理,可以使用dispatch_after。
dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, 3ull * NSEC_PER_SEC);
// 在3秒后追加Block到Main Dispatch Queue中
dispatch_after(time, dispatch_get_main_queue(), ^{
NSLog(@"waited at least three seconds");;
});
dispatch_after函数
第一个参数:
指定时间的dispatch_time_t类型的值,可以使用dispatch_time函数或dispatch_walltime函数作成。
第二个参数:
要追加处理的Dispatch Queue。
第三个参数:
要执行处理的Block。
问题一、dispatch_after函数理解的注意事项?
dispatch_after函数不是在指定时间后执行处理,而只是在指定时间追加处理到Dispatch Queue(第二个参数)。
问题二、dispatch_after函数精度问题?
有误差,大致延迟执行处理,可以用该函数,严格要求时间下会出现问题。
问题三、dispatch_time函数?
dispatch_time函数获取从第一个参数指定时间开始,到第二个指定时间后的时间,通常用于计算相对时间。
DISPATCH_TIME_NOW 表示现在的时间。
// 从现在开始1秒后的dispatch_time_t类型的值
dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, 1ull * NSEC_PER_SEC);
“ull”是C语言的数值字面量,是显示表明类型时使用的字符串。
NSEC_PER_SEC单位:毫微秒
NSEC_PER_MSEC单位:毫秒
问题四、dispatch_walltime函数?
由POSIX中使用的struct timespec类型的时间得到dispatch_time_t类型的值,一般用于计算绝对时间,如指定某年某月某日某分某秒这一绝对时间。
网友评论