簡介
想了解一個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