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: { //...... })