GCD 之延后執行(dispatch_after)

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容