关于iOS定时器的间隔周期

时间:2021-11-08 23:29:56

计时器不准确的原因是,计时器只有在 runLoop 的一次循环中被检查,所以如果在上次循环中做了什么耗时的操作,那么计时器就被延后执行了。

正确的方法应该是新开一个线程,然后在新开的线程里设定一个 timer,并执行。

__block TestViewController *blockSelf = self;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    blockSelf->_timer=[NSTimer scheduledTimerWithTimeInterval:1.0
                                            target:blockSelf
                                        selector:@selector(caculateLeftTimeForTomorrow)
                                          userInfo:nil
                                           repeats:YES] ;
    [[NSRunLoop currentRunLoop] addTimer:blockSelf->_timer forMode:NSDefaultRunLoopMode];
    [[NSRunLoop currentRunLoop] run];
});