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