神刀安全网

iOS利用NSCondition唤醒/休眠线程

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

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

iOS利用NSCondition唤醒/休眠线程

图 1

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

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

iOS利用NSCondition唤醒/休眠线程

图 2

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

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

iOS利用NSCondition唤醒/休眠线程

iOS利用NSCondition唤醒/休眠线程

iOS利用NSCondition唤醒/休眠线程

上demo代码:

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

iOS利用NSCondition唤醒/休眠线程

图 2

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

iOS利用NSCondition唤醒/休眠线程

iOS利用NSCondition唤醒/休眠线程

图 3

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

iOS利用NSCondition唤醒/休眠线程

图 4

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

iOS利用NSCondition唤醒/休眠线程

图5

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

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

iOS利用NSCondition唤醒/休眠线程

图 6

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

iOS利用NSCondition唤醒/休眠线程

图 7

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

iOS利用NSCondition唤醒/休眠线程

图 8

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

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

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。谢谢~

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » iOS利用NSCondition唤醒/休眠线程

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址