簡介
想了解一個app啟動圖顯示結(jié)束之后展示廣告資源的需求。即開啟一個子線程獲取廣告資源,LaunchScreen停留在當(dāng)前界面,即需要主線程先休眠,當(dāng)子線程的廣告資源獲取完成,立即喚醒主線程直接展示廣告資源。查了一些資料,發(fā)現(xiàn)此類文章不是很多,以下是我的收獲:利用NSCondition去喚醒、休眠 線程~
先看蘋果官方文檔對NSCondition的概述:如圖1

文檔說NSCondition充當(dāng)一個鎖的角色,可以通過信號去喚醒線程。
再看看文檔提供的例子:如圖2

簡言之就是:第 1 步鎖住NSCondition的對象condition,這一步很重要,這樣可以確保不受到其他相同條件的線程的干擾造成線程的不安全,第 2 步根據(jù)設(shè)置的布爾值作為一個條件的判斷依據(jù)。第 3 步改變信號布爾變量,最后解鎖condition。
以下是文檔較詳細(xì)的敘述:(是對上圖例子的敘述,可以跳過不看)



上demo代碼:
1、創(chuàng)建一個繼承類JLThread,繼承自NSThread。在.h文件聲明休眠和喚醒的方法。

2、在.m文件創(chuàng)建一個線程,并初始化NSCondition,在休眠的方法dormancy和喚醒的方法wakeUp寫入需要的代碼。


2、在控制器中開始測試:如圖4

在控制臺中打?。航Y(jié)論如文字所述,如圖5

并且是不會進(jìn)去while的方法的,到這樣就是成功休眠啦~~~
最后再來測試一個異步線程的休眠:如圖6

需要注意一個細(xì)節(jié):如圖7的執(zhí)行效果跟圖6是一樣的。

NSTread中的cancel是無法做到喚醒線程的:如圖8

到這里NSCondition的休眠、喚醒就算正式結(jié)束了~~
希望對你有所幫助!如有寫的不對的地方歡迎聯(lián)系我一起交流~ QQ:1002282311