更加精確的定時器:dispatch_source_t


在使用定時器時,我們經常使用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

*/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM