iOS利用NSCondition喚醒/休眠線程

簡介

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容