本文主要是介绍iOS Runloop面试题(RunLoop与NSTimer),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
RunLoop与NSTimer
一个比较常见的问题:滑动tableView时,定时器还会生效吗?
默认情况下RunLoop运行在kCFRunLoopDefaultMode
下,而当滑动tableView时,RunLoop切换到UITrackingRunLoopMode
,而Timer是在kCFRunLoopDefaultMode
下的,就无法接受处理Timer的事件。
怎么去解决这个问题呢?把Timer添加到UITrackingRunLoopMode上并不能解决问题,因为这样在默认情况下就无法接受定时器事件了。
所以我们需要把Timer同时添加到UITrackingRunLoopMode
和kCFRunLoopDefaultMode
上。
那么如何把timer同时添加到多个mode上呢?就要用到NSRunLoopCommonModes
了
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
Timer就被添加到多个mode上,这样即使RunLoop由kCFRunLoopDefaultMode
切换到UITrackingRunLoopMode
下,也不会影响接收Timer事件。
这篇关于iOS Runloop面试题(RunLoop与NSTimer)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!