解决NSTimer在TableView滑动中暂停问题

产品需求有时候会在tableview中加入NSTimer用来倒计时,但是如果使用NSTimer的简便构造方法时:
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;

在tableview滑动时timer就是显示暂停,原因是timer的这个简便构造方法把timer加入了NSRunLoopDefaultMode上,而tableview在滑动时只会处理UITrackingRunLoopMode,RunLoop并没有处理timer事件。

解决的办法是将timer绑定到NSRunLoopCommonModes上,通过以下方法构造timer:

+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;

通过以下方法将构造的timer绑定到NSRunLoopCommonModes上:

[[NSRunLoop currentRunLoopaddTimer:self.timerforMode:NSRunLoopCommonModes];

这样timer在tableview滑动中就不会暂停了。

当然这样做也不是100%能解决问题,有人反映timer计时不准确。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值