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í)行。

