美文网首页程序员IOSiOS Developer
iOS利用NSCondition唤醒/休眠线程

iOS利用NSCondition唤醒/休眠线程

作者: 大富豪管家 | 来源:发表于2017-10-13 01:15 被阅读446次

简介

想了解一个app启动图显示结束之后展示广告资源的需求。即开启一个子线程获取广告资源,LaunchScreen停留在当前界面,即需要主线程先休眠,当子线程的广告资源获取完成,立即唤醒主线程直接展示广告资源。查了一些资料,发现此类文章不是很多,以下是我的收获:利用NSCondition去唤醒、休眠 线程~

先看苹果官方文档对NSCondition的概述:如图1

图 1

文档说NSCondition充当一个锁的角色,可以通过信号去唤醒线程。

再看看文档提供的例子:如图2

图 2

简言之就是:第 1 步锁住NSCondition的对象condition,这一步很重要,这样可以确保不受到其他相同条件的线程的干扰造成线程的不安全,第 2 步根据设置的布尔值作为一个条件的判断依据。第 3 步改变信号布尔变量,最后解锁condition。

以下是文档较详细的叙述:(是对上图例子的叙述,可以跳过不看)

上demo代码:

1、创建一个继承类JLThread,继承自NSThread。在.h文件声明休眠和唤醒的方法。

图 2

2、在.m文件创建一个线程,并初始化NSCondition,在休眠的方法dormancy和唤醒的方法wakeUp写入需要的代码。

图 3

2、在控制器中开始测试:如图4

图 4

在控制台中打印:结论如文字所述,如图5

图5

并且是不会进去while的方法的,到这样就是成功休眠啦~~~

最后再来测试一个异步线程的休眠:如图6

图 6

需要注意一个细节:如图7的执行效果跟图6是一样的。

图 7

NSTread中的cancel是无法做到唤醒线程的:如图8

图 8

到这里NSCondition的休眠、唤醒就算正式结束了~~

希望对你有所帮助!如有写的不对的地方欢迎联系我一起交流~ QQ:1002282311

相关文章

  • iOS利用NSCondition唤醒/休眠线程

    简介 想了解一个app启动图显示结束之后展示广告资源的需求。即开启一个子线程获取广告资源,LaunchScreen...

  • iOS用NSCondition休眠线程

    记得以前项目中有个需求是,部分接口的调用需要放到非主线程中,并且还有顺序要求。那时NSURLConnection还...

  • 线程锁

    探讨iOS开发中各种锁使用NSCondition实现多线程同步 NSCondition是线程同步, 阻塞线程。 取...

  • iOS同步锁小探

    我测试的iOS同步锁包括@synchronsized、NSLock、NSCondition、NSCondition...

  • iOS NSCondition详解

    iOS NSCondition讲解 1.定义 官方文档:The NSCondition class impleme...

  • iOS-锁-NSCondition&NSConditionLoc

    NSCondition 条件锁,顾名思义,就是满足某些条件才会开锁。NSCondition,可以确保线程仅在满足特...

  • 使用NSCondition实现不同线程等待唤醒

    NSCondition : 一个线程可能需要等待其它线程返回结果.本例中,使用 condition 对"生产","...

  • 多线程之(线程休眠)

    线程休眠 线程休眠,是通过调用线程的sleep()方法来实现。即让线程当前的状态转换为休眠状态(阻塞状态)。我们可...

  • NSRunLoop

    NSRunLoop--NSRunLoop是IOS消息机制的处理模式,控制NSRunLoop里面线程的执行和休眠,在...

  • iOS NSCondition使用说明和场景

    1:NSCondition原理和作用 NSCondition 的对象实际上作为一个锁和一个线程检查器:锁主要为了当...

网友评论

    本文标题:iOS利用NSCondition唤醒/休眠线程

    本文链接:https://www.haomeiwen.com/subject/vftayxtx.html