iOS中的常用定時器分為這幾類:
- NSTimer
- CADisplayLink
- GCD定時器
選擇GCD定時器原因:
- 時間準確
- GCD定時器不依賴NSRunLoop
- 相對操作簡單,安全
使用:
// 獲得隊列 dispatch_get_global_queue獲取全局隊列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
//創(chuàng)建一個定時器 DISPATCH_SOURCE_TYPE_TIMER表示定時器
dispatch_source_t dispatchSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
//由于定時器默認是暫停的所以我們啟動一下
//啟動定時器
dispatch_resume(dispatchSource);
//設(shè)置開始時間 dispatch_walltime設(shè)定的時間段是絕對的,與設(shè)備是否running無關(guān)
dispatch_time_t start = dispatch_walltime(NULL, (int64_t)(0.0 * NSEC_PER_SEC));
//設(shè)置時間間隔 NSEC_PER_SEC表示的是秒數(shù) interval為間隔時間
uint64_t time = (uint64_t)(interval * NSEC_PER_SEC);
//設(shè)置定時器
dispatch_source_set_timer(dispatchSource, start, time, 0);
//設(shè)置回調(diào) 時間間隔到點時執(zhí)行block
dispatch_source_set_event_handler(dispatchSource, ^{
//執(zhí)行操作
});
//取消定時器
dispatch_source_cancel(dispatchSource);
具體使用看可以移步demo