美文网首页
CCD比NSTimer相对准时的原因

CCD比NSTimer相对准时的原因

作者: heart_领 | 来源:发表于2018-09-17 13:52 被阅读9次

一、NSTimer不准时的原因,主要有两个:
1.Runloop循环处理的时间
2.受Runloop模式的影响
二、GCDTimer
1.GCDTimer精度高
2.GCDTimer主线程执行会RunLoop影响,子线程不受影响
3.GCDTimer不受模式切换的影响

- (void) gcdTimerTest {
    
    // 队列
    dispatch_queue_t queue = dispatch_get_main_queue();//在主队列上会受runloop的影响,主线程上
//    dispatch_queue_t queue = dispatch_queue_create("timer_serial_label", DISPATCH_QUEUE_SERIAL);//非主队列上不受runloop影响,子线程上
    // 创建定时器
    dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
    
    // 设置定时的开始时间、间隔时间,dispatch_time(DISPATCH_TIME_NOW, 0):开始时间,立即开合,0改为2,则2秒后开始
    dispatch_source_set_timer(timer, dispatch_time(DISPATCH_TIME_NOW, 0), 1*NSEC_PER_SEC, 0);
    
    // 设置定时器回调
    dispatch_source_set_event_handler(timer, ^{
        NSLog(@"你好%@",[NSThread currentThread]);
    });
    // 启动定时器,默认是关闭的
    dispatch_resume(timer);
    self.timer = timer;
//    dispatch_cancel(self.timer);//定时器停止
//    self.timer = nil; //因为是强引用,要置空
/**
dispatch_resume(self.timer);//执行的情况下,返回时会走dealloc方法
dispatch_suspend(self.timer);//挂起的情况下,返回时会崩溃
NSTimer不能暂停,只能销毁,timer可以通过dispatch_suspend(self.timer)暂停定时器
dispatch_cancel(self.timer);//定时器停止时,返回不会崩溃
*/
}

三、GCD timer与NSTimer是不同的:
1.二者都是源,一个是RunLoop的源,一个Dispatch的源
2.GCD timer不需要加入mode

相关文章

  • CCD比NSTimer相对准时的原因

    一、NSTimer不准时的原因,主要有两个:1.Runloop循环处理的时间2.受Runloop模式的影响二、GC...

  • iOS NSTimer没有GCD Timer准时的原因

    NSTimer不准时的原因:1:RunLoop循环处理的时间2:受RunLoop模式的影响 gcd的timer与N...

  • iOS定时器

    一、NSTimer 如果当前runLoop过于繁忙,则会导致NSTimer不够准时,如果NSTimer设置的间隔时...

  • 使用GCD来创建Timer

    推荐使用GCD方式创建timer的原因,GCD是基于内核的,会更加准时,NSTimer和CADisplayLink...

  • GCD timer

    推荐使用GCD方式创建timer的原因,GCD是基于内核的,会更加准时,NSTimer和CADisplayLink...

  • iOS NSTimer 和 GCD 定时器及封装

    iOS NSTimer 和 GCD 定时器及封装 iOS NSTimer 不准时 NSTimer 内部是有 run...

  • GCD定时器的实现

    GCD定时器 GCD定时器不受RunLoop约束,比NSTimer更加准时 证明,实现GCD定时器

  • GCD定时器的封装

    NSTimer 依赖于 RunLoop,如果 RunLoop 的任务过于繁重,可能会导致 NSTimer 不准时。...

  • iOS - GCD中的定时器

    GCD定时器优点:① GCD定时器不受RunLoop约束② 比NSTimer更加准时。 GCD定时器用法敲 dis...

  • 内存管理 之 gcd定时器

    1、NSTimer并不准时 NSTimer是我们经常使用到的计时器,那么它是否符合严格意义上的准时呢?答案是否定的...

网友评论

      本文标题:CCD比NSTimer相对准时的原因

      本文链接:https://www.haomeiwen.com/subject/whvknftx.html