iOS之UITableView计时器的实现方式总结(NSTimer、DispatchSource、CADisp

2020-01-21 07:32:35王冬梅

iOS,UITableView,计时器,NSTimer,DispatchSource,CADisplayLink

上述代码比较简单,就是在Cell上添加了一个定时器,然后没1秒更新一次时间,并在Cell的timeLabel上显示,运行效果如下所示。从该运行效果中我们不难发现,当我们滑动TableView时,该定时器就停止了工作。具体原因就是当前线程的RunLoop在TableView滑动时将DefaultMode切换到了TrackingRunLoopMode。因为Timer默认是添加在RunLoop上的DefaultMode上的,当Mode切换后Timer就停止了运行。

但是当停止滑动后,Mode又切换了回来,所以Timer有可以正常工作了。

  iOS,UITableView,计时器,NSTimer,DispatchSource,CADisplayLink

为了进一步看一下Mode的切换,我们可以在相应的地方获取当前线程的RunLoop并且打印对应的Mode。下方代码就是在TableView所对应的VC上添加的,我们在viewDidLoad()、viewDidAppear()以及scrollViewDidScroll()这个代理方法中对当前线程所对应的RunLoop下的currentMode进行了打印,其代码如下。

iOS,UITableView,计时器,NSTimer,DispatchSource,CADisplayLink