RunLoop学习小记

RunLoop学习小记

先描述一个场景,scrollView上有一个定时器,但是每当我们滑动scrollView时,定时器就不走了,这可能使得倒计时的时间不准,原因是什么呢?怎么解决呢?这就用到了RunLoop的知识了。

当我们创建一个定时器,并且加入到RunLoop中,我们会有如下代码:

NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 repeats:YES block:^(NSTimer * _Nonnull timer) {

            NSLog(@"创建一个定时器");

        }];

[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];

这样,我们就创建了一个定时器,并且每一秒打印一下。但是,如果这个我们此时拖动在同一个界面的scrollView时,我们会发现,在我们拖动的时候定时器不动了,不拖动的时候,定时器又恢复了正常,问题在哪呢?

原来是NSDefaultRunLoopMode这个参数!

于是我们换成了UITrackingRunLoopMode,我们却惊喜的发现,当我们滑动的时候打印,不滑动的时候却不打印了。

NSDefaultRunLoopMode(默认模式)

UITrackingRunLoopMode (UI模式)

当我们把这两种mode都加上,结果正如我们所料,打印正常了。

有没有一个mode就能完成这两种模式的效果呢?

答案是有的!

当mode为NSRunLoopCommonModes时,就完成了刚才的操作。相当于两种mode都添加上了,滑动scrollView就不会影响倒计时了。

你可能感兴趣的:(RunLoop学习小记)