移动开发在路上-- IOS移动开发系列 多线程二

最近太忙没太多的时间,忙碌的码农生活空下来一点时间,都会挤出来看一些技术或者咨询的文章,废话不多说,直奔主题。

接着上一次的继续说。

定时器在多线程的使用

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一下、来保持这个线程的活跃

}

创建新项目

项目的创建,我在这里就不再说了上一篇文章中说的很详细,大家应该能看得明白,没看过的可以看一下

移动开发在路上-- IOS移动开发系列 多线程一

代码如下

线程直接就结束掉了 

把代码打开

在运行

是不是达到了我们的效果

期待大家的继续支持,只有大家的鼓励才是我最大的动力!

分享快乐!支持我吧!觉得有用的话记得点推荐一下哦!

作者:zhangwenjian
出处:http://www.cnblogs.com/zhangwenjian
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 

原文地址:https://www.cnblogs.com/zhangwenjian/p/3624199.html