最近太忙没太多的时间,忙碌的码农生活空下来一点时间,都会挤出来看一些技术或者咨询的文章,废话不多说,直奔主题。
接着上一次的继续说。
定时器在多线程的使用
NSRunLoop 是线程相关的基础框架的一部分。一个run loop 就是一个事件处理的循环,用来不停的调度工作以及处理输入事件。
线程的生命周期存在五个状态:新建、就绪、运行、阻塞、死亡。
NSRunLoop 可以保持一个线程一直为活动状态,不会马上销毁掉。
一般在(延时调用一个方法、定时器)
run loop 属于一个调度 例如延时5s run loop ji'lu记录这个时间去延时调用这个方法
定时器 例如每隔1s来执行一个事件
那么今天我们主要说一下定时器在多线程的使用
在多线程里边如果要使用定时器必须开启RunLoop,因为只有开启RunLoop保持线程为活动状态,才能保持定时器能不断执行。
有些面试题上边可能会问,一个定时器1s精不精确,是不是真的一秒钟调用一次,有没有延迟?那么为什么会有延时呢?一个定时器在主线程上边,每隔一秒调用一次,因为是主线程,他做的事情特别多,难免会有阻塞的情况,加入主线程阻塞了0.1秒那么你这个定时器就不准确了。开一个多线程去运行定时器,那么肯定是精确地。
献给一段示例代码
-(void)runThread{
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timeAction) userInfo:nill repeats:YES];
[[NSRunLoop currentRunLoop] run];//这里一定要RunLoop一下要不然程序走到这里一直走下去程序就结束掉了、所以说必须RunLoop一下、来保持这个线程的活跃
}
创建新项目
项目的创建,我在这里就不再说了上一篇文章中说的很详细,大家应该能看得明白,没看过的可以看一下
代码如下
线程直接就结束掉了
把代码打开
在运行
是不是达到了我们的效果
期待大家的继续支持,只有大家的鼓励才是我最大的动力!
分享快乐!支持我吧!觉得有用的话记得点推荐一下哦!