解决UITableView上计时器(Timer)的滑动问题

本文探讨了UITableView中计时器(Timer)在滑动时停止工作的问题及解决方案。通过理解RunLoop的工作原理及其不同模式,文章详细介绍了如何将计时器的RunLoop模式设置为Common模式,以确保计时器在UITableView滑动时仍能正常运行。

     要想计时器(Timer)不因UITableView的滑动而停止工作,就得探讨一下RunLoop了。

     RunLoop本质和它的意思一样是运行着的循环,更确切的说是线程中的循环。它用来接受循环中的事件和安排线程工作,并在没有工作时,让线程进入睡眠状态。

     所以根据RunLoop的定义,当Timer被滑动过了,误以为没有工作,让它进入睡眠状态了。怎样来避免这种情况呢?我们可以先来了解RunLoop的几种模式。RunLoop有Default模式、Connection模式、Modal模式、Event tracking模式和Common模式(具体模式的含义在http://www.cnblogs.com/fmdxiangdui/p/6164350.html介绍)。在Cocoa应用程序中,默认情况下Common Modes包含default modes,modal modes,event Tracking modes.可使用CFRunLoopAddCommonMode方法想Common Modes中添加自定义modes。因此,我们需要把计时器的RunLoop的Mode调整为Common模式。具体的操作如下:

1 NSTimer *timer = [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
2         //将定时器添加到runloop中
3 [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes ];
4 [[NSRunLoop currentRunLoop] run];

 

 
posted on 2016-12-12 14:17 相而勿绝 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/fmdxiangdui/p/6164320.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值