iOS利用NSCondition喚醒/休眠線程

簡介

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

先看蘋果官方文檔對NSCondition的概述:如圖1

圖 1

文檔說NSCondition充當(dāng)一個鎖的角色,可以通過信號去喚醒線程。

再看看文檔提供的例子:如圖2

圖 2

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

以下是文檔較詳細(xì)的敘述:(是對上圖例子的敘述,可以跳過不看)

上demo代碼:

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

圖 2

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

圖 3

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

圖 4

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

圖5

并且是不會進(jìn)去while的方法的,到這樣就是成功休眠啦~~~

最后再來測試一個異步線程的休眠:如圖6

圖 6

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

圖 7

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

圖 8

到這里NSCondition的休眠、喚醒就算正式結(jié)束了~~

希望對你有所幫助!如有寫的不對的地方歡迎聯(lián)系我一起交流~ QQ:1002282311

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容