NSTimer依赖于NSRunLoop,如果RunLoop的任务过于繁重,可能会导致NSTimer不准时
而CGD的定时器会更加准时;下面是创建GCD定时器所使用的函数
// 创建队列
dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
// 创建一个定时器
dispatch_source_t timer=dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
//设置时间间隔 start开始时间0立即开始interval间隔时间;
dispatch_source_set_timer(timer, dispatch_time(DISPATCH_TIME_NOW, start*NSEC_PER_SEC), interval*NSEC_PER_SEC, 0);
dispatch_semaphore_wait(_semaphore, DISPATCH_TIME_FOREVER);
NSString *name = [NSString stringWithFormat:@"%lu",(unsigned long)_timerHander.count];
_timerHander[name]=timer;
dispatch_semaphore_signal(_semaphore);
//设置回调
dispatch_source_set_event_handler(timer, ^{
});
//启动定时器
dispatch_resume(timer);
下例为线程安全的CGD定时器封装
static NS