标题:
内存管理(3)
[打印本页]
作者:
look_w
时间:
2019-3-11 20:35
标题:
内存管理(3)
2.GCD定时器
NSTimer依赖于RunLoop,如果RunLoop的任务过于繁重,可能会导致NSTimer不准时
为什么不准确呢?因为它基于runloop,runloop每跑一圈都需要耗时间,而且时间不会一样。
比如定时器是1s执行一次。runloop跑一圈是0.2s,发现还不到1s,继续跑。下一次跑了0.9s,发现是1.1s了,就去执行NSTimer,导致NSTimer不准确。
而GCD的定时器会更加准时
因为他不基于NSRunloop
dispatch_queue_t queue = dispatch_queue_create("timer", DISPATCH_QUEUE_SERIAL);
// 创建定时器
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
// 设置时间
uint64_t start = 2.0; // 2秒后开始执行
uint64_t interval = 1.0; // 每隔1秒执行
dispatch_source_set_timer(timer,
dispatch_time(DISPATCH_TIME_NOW, start * NSEC_PER_SEC),
interval * NSEC_PER_SEC, 0);
// 设置回调
// dispatch_source_set_event_handler(timer, ^{
// NSLog(@"1111");
// });
dispatch_source_set_event_handler_f(timer, timerFire);
// 启动定时器
dispatch_resume(timer);
self.timer = timer;
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0