RunLoop应用篇–定时器
前一章节主要讲解了RunLoop的具体的概念, 以及各个部分的具体介绍, 从本章节开始, 将会具体介绍RunLoop的具体应用, 本文主要讲解NSTimer的具体应用。
本文要说的NTimer的应用其实是很RunLoop的mode相关的,先来想想这样一个问题?
我们使用NSTimer循环执行某一事件, 当我们界面上有滑动的时候,也就是ScrollView在滑动过程中, NSTimer的事件还会执行吗?
仔细想想, 我们并不能确定可不可以?如果我们只是使用了NSTimer,结果是不会执行了。这是为什么捏?
其实, 跟前一章具体介绍的RunLoop的机制有关, 当我们的应用程序启动后,主线程会默认开启RunLoop,然后我们使用的NSTimer会被加入到RunLoop中,注意这时候的mode是NSDefaultRunLoopMode,当我们不滑动的时候没什么问题,但是我们一旦滑动,RunLoop的mode会切换成UITrackingRunLoopMode,前面也提过了,这个时候其实会退出loop,然后重新指定新的mode进入,之前的NSTimer加入的默认mode其实是NSDefaultRunLoopMode,那么这个时候切换了mode,NSTimer就不会执行了,当停止滑动后,NSTimer事件又开始执行了,这就是NSTimer为什么在滑动的时候停止执行的原因。
那么接下来,给大家提供两种解决的方法:
第一种其实很容易想到,那就是将NSTimer添加是的mode改成NSRunLoopCommonModes