RunLoop应用篇--定时器

RunLoop应用篇–定时器

前一章节主要讲解了RunLoop的具体的概念, 以及各个部分的具体介绍, 从本章节开始, 将会具体介绍RunLoop的具体应用, 本文主要讲解NSTimer的具体应用。

本文要说的NTimer的应用其实是很RunLoop的mode相关的,先来想想这样一个问题?

我们使用NSTimer循环执行某一事件, 当我们界面上有滑动的时候,也就是ScrollView在滑动过程中, NSTimer的事件还会执行吗?

仔细想想, 我们并不能确定可不可以?如果我们只是使用了NSTimer,结果是不会执行了。这是为什么捏?

其实, 跟前一章具体介绍的RunLoop的机制有关, 当我们的应用程序启动后,主线程会默认开启RunLoop,然后我们使用的NSTimer会被加入到RunLoop中,注意这时候的mode是NSDefaultRunLoopMode,当我们不滑动的时候没什么问题,但是我们一旦滑动,RunLoop的mode会切换成UITrackingRunLoopMode,前面也提过了,这个时候其实会退出loop,然后重新指定新的mode进入,之前的NSTimer加入的默认mode其实是NSDefaultRunLoopMode,那么这个时候切换了mode,NSTimer就不会执行了,当停止滑动后,NSTimer事件又开始执行了,这就是NSTimer为什么在滑动的时候停止执行的原因。

那么接下来,给大家提供两种解决的方法:
第一种其实很容易想到,那就是将NSTimer添加是的mode改成NSRunLoopCommonModes࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值