程序员IOSiOS Developer

iOS利用NSCondition唤醒/休眠线程

2017-10-13  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读