dispatch_time_t 的創(chuàng)建

開發(fā)中常用到GCD方法dispatch_after(<#dispatch_time_t when#>, <#dispatch_queue_t _Nonnull queue#>, <#^(void)block#>) 方法進(jìn)行延遲處理

一般在主線程中我們不能用sleep來進(jìn)行延遲,所以用dispatch_after是最合適的。dispatch_after能讓我們添加進(jìn)隊(duì)列的任務(wù)延時(shí)執(zhí)行,這個(gè)函數(shù)并不是在指定時(shí)間后執(zhí)行處理,而只是在指定時(shí)間后追加處理到dispatch_queue隊(duì)列中執(zhí)行。

OC中為dispatch_time_t提供了兩種構(gòu)造方法

dispatch_time(dispatch_time_t when, int64_t delta)
dispatch_walltime(const struct timespec *_Nullable when, int64_t delta)

① 用法

dispatch_time_t time_t = dispatch_time(DISPATCH_TIME_NOW, 10* NSEC_PER_SEC);

dispatch_time_t when 系統(tǒng)提供兩種定義如下

#define DISPATCH_TIME_NOW (0ull)
#define DISPATCH_TIME_FOREVER (~0ull)

②用法

dispatch_time_t time_t = dispatch_walltime(DISPATCH_TIME_NOW, 100* NSEC_PER_USEC)

二者的區(qū)別

  • 當(dāng)設(shè)備進(jìn)入睡眠狀態(tài)時(shí),dispatch_time將停止運(yùn)行,而dispatch_walltime可以繼續(xù)運(yùn)行。因此,如果您想在20分鐘后完成一個(gè)指定操作,但是在5分鐘時(shí)您的設(shè)備進(jìn)入休眠狀態(tài)并休眠10分鐘,dispatch_walltime將從現(xiàn)在開始執(zhí)行20分鐘,即在計(jì)算機(jī)醒來后5分鐘執(zhí)行。dispatch_time將在設(shè)備醒來10分鐘后執(zhí)行。(即:設(shè)備休眠不會(huì)對(duì)dispatch_walltime計(jì)時(shí)產(chǎn)生影響,二會(huì)對(duì)dispatch_time產(chǎn)生影響,延長相應(yīng)休眠時(shí)間。)

  • dispatch_time得到的時(shí)間長度是相對(duì)設(shè)備運(yùn)行時(shí)間,即設(shè)備運(yùn)行時(shí)才計(jì)時(shí);而dispatch_walltime設(shè)定的時(shí)間段是絕對(duì)的,與設(shè)備是否運(yùn)行無關(guān);

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

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

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