在使用定時器時,我們經常使用NSTimer,但是由於NSTimer會受RunLoop影響,當RunLoop處理的任務很多時,就會導致NSTimer的精度降低,所以在一些對定時器精度要求很高的情況下,應該考慮采用GCD定時器,實現代碼如下:
// 隊列(隊列時用來確定該定時器存在哪個隊列中) dispatch_queue_t queue = dispatch_get_main_queue(); // 創建GCD定時器 _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); dispatch_time_t start = dispatch_time(DISPATCH_TIME_NOW, 0 * NSEC_PER_SEC); // 開始時間 uint64_t interval = 2 * NSEC_PER_SEC; // 時間間隔 // 設置GCD定時器開始時間,間隔時間 dispatch_source_set_timer(_timer, start, interval, 0); // GCD定時器處理回調方法 dispatch_source_set_event_handler(_timer, ^{ NSLog(@"---------%@", [NSThread currentThread]); }); // GCD定時器啟動,默認是關閉的 dispatch_resume(_timer); /** dispatch_source_cancel(_timer); // 異步取消調度源
_timer = nil; // 將 dispatch_source_t 置為nil
*/