有这样一个场景,在UIScrollView
中添加一个Label
,通过NSTimer
去给这个Label
添加一个倒计时功能,如果在将计时器添加到RunLoop
中的时候使用了NSDefaultRunLoopMode
,那么当ScrollView
滚动时Label
上的倒计时就会停止,但是如果使用了NSRunLoopCommonModes
就不会出现这样的情况。
之所以会这样,是因为主线程的NSRunLoop
默认有两个Mode
,一个是NSDefaultRunLoopMode
,另一个是UITrackingRunLoopMode
,当ScrollView
滚动时会默认切换到UITrackingRunLoopMode
,加入只是添加到NSDefaultRunLoopMode
中,那么切换Mode
时自然就不会再执行NSTimer
的方法了,而NSRunLoopCommonModes
这个Mode
实际上是NSDefaultRunLoopMode
、UITrackingRunLoopMode
的集合体,注意看是NSRunLoopCommonModes
后面多了一个s,其实这个CommonModes
是默认标记了这两个Mode
,当给RunLoop
中添加Timer
时给这两个Mode
中同时添加了这个Timer
,所以当Mode
切换时就不会有问题了,当然可以同时将Timer
添加到这两个Mode
中也能起到同样的效果
如有哪里写的不妥欢迎大神们指正~~
网友评论