GCD 實現(xiàn)定時器

NSTimer的定時器方法

About NSTimer

GCD中使用dispatch_source_t實現(xiàn)定時器

  • 主要用的是dispatch_source_t作為一個timer來使用
  • 需要將dispatch_source_t timer設置為成員變量,不然會立即釋放
    @property (nonatomic, strong) dispatch_source_t timer;
    
  • 中止計數(shù)器的方式如下:
    dispatch_source_cancel(_timer);
    
  • 使用它的時候,會帶出一串東西,Xcode默認輸入下面的內容會出現(xiàn)一大串內容。
    輸入

    內容如下:
    形式

主要來說一下dispatch_source_set_timer方法!

void dispatch_source_set_timer(
  dispatch_source_t source, 
  dispatch_time_t start,
  uint64_t interval,
  uint64_t leeway
);
  • timer —— 定時器,已定義好。不用管他
  • start —— 表示開始的時機,可以通過這句代碼來配置。如果不需要延時,那么只要傳DISPATCH_TIME_NOW即可
    dispatch_time_t startDelayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayTime * NSEC_PER_SEC));
    
  • interval表示時間間隔
  • leeway
    這個參數(shù)告訴系統(tǒng)我們需要計時器觸發(fā)的精準程度。所有的計時器都不會保證100%精準,這個參數(shù)用來告訴系統(tǒng)你希望系統(tǒng)保證精準的努力程度。如果你希望一個計時器沒五秒觸發(fā)一次,并且越準越好,那么你傳遞0為參數(shù)。另外,如果是一個周期性任務,比如檢查email,那么你會希望每十分鐘檢查一次,但是不用那么精準。所以你可以傳入60,告訴系統(tǒng)60秒的誤差是可接受的。這樣有什么意義呢?簡單來說,就是降低資源消耗。如果系統(tǒng)可以讓cpu休息足夠長的時間,并在每次醒來的時候執(zhí)行一個任務集合,而不是不斷的醒來睡去以執(zhí)行任務,那么系統(tǒng)會更高效。如果傳入一個比較大的leeway給你的計時器,意味著你允許系統(tǒng)拖延你的計時器來將計時器任務與其他任務聯(lián)合起來一起執(zhí)行。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容