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