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文件声明休眠和唤醒的方法。
图 22、在.m文件创建一个线程,并初始化NSCondition,在休眠的方法dormancy和唤醒的方法wakeUp写入需要的代码。
图 32、在控制器中开始测试:如图4
图 4在控制台中打印:结论如文字所述,如图5
图5并且是不会进去while的方法的,到这样就是成功休眠啦~~~
最后再来测试一个异步线程的休眠:如图6
图 6需要注意一个细节:如图7的执行效果跟图6是一样的。
图 7NSTread中的cancel是无法做到唤醒线程的:如图8
图 8到这里NSCondition的休眠、唤醒就算正式结束了~~
希望对你有所帮助!如有写的不对的地方欢迎联系我一起交流~ QQ:1002282311