解决定时器在主线程不工作问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决定时器在主线程不工作问题相关的知识,希望对你有一定的参考价值。

 

有时候在主线程执行一些操作的时候,定时器会被卡死,比如来回滚动和点击屏幕处理一些主线程事务时,

就是说主界面有UITableView或者UIScrollView,滑动UITableView或者UIScrollView。这个时候NSTimer失效了。

NSTimer *timer = [NSTimer timerWithTimeInterval:2 target:self selector:@selector(someAction) userInfo:nil repeats:YES];

 

解决方法就是将其加入到UITrackingRunLoopMode模式或NSRunLoopCommonModes模式中。

[[NSRunLoop currentRunLoop] addTimer:timer forMode:UITrackingRunLoopMode];

或者

[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

以上是关于解决定时器在主线程不工作问题的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 AsyncTask 在主线程上运行?

测试片段不执行定时器或示例超时

iOS开发 在异步线程里面添加定时器,或者perform afterDelay时不响应的问题

来自dispatch_async全局崩溃的C函数调用,但在主队列上工作

在主线程上处理大型全局对象时如何不阻止来自工作线程的主 UI 线程

如何让工作线程在主 UI 线程上执行回调?