美文网首页
定时器不准 Runloop解决

定时器不准 Runloop解决

作者: 晓蜻蜓 | 来源:发表于2018-06-07 18:37 被阅读0次

定时不准原因


  • NSDefaultRunLoopMode 模式中 优先处理输入源事件,处理输入源事件时,不能处理定时源事件
  • 当主线程阻塞时,定时器也会阻塞
  • 如果UITableView滑动时,runloop的mode切换为UITrackingRunLoopMode,计时中断

    //这里的本质是 NSDefaultRunLoopMode 不能使用这种事件循环的模式
//    [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
   dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        //1.手动开启定时器
        NSTimer *timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
        //2.手动加入到事件循环中
        [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
        //3.手动开启定时器
        [timer fire];
        //NSRunLoop 事件循环 处理的事件有:1.输入源事件(滑动事件、触摸事件)2.定时源事件
        //NSDefaultRunLoopMode 模式中 优先处理输入源事件,处理输入源事件时,不能处理定时源事件
        [[NSRunLoop currentRunLoop] run];
    });

相关文章

网友评论

      本文标题:定时器不准 Runloop解决

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