有這樣一個場景,在 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
中也能起到同樣的效果
如有哪里寫的不妥歡迎大神們指正~~
Tags: ScrollView NSTimer
文章來源:http://www.jianshu.com/p/424a7e01dca6