Swift-主線(xiàn)程處理 UI 事件

應(yīng)用場(chǎng)景

iOS 機(jī)制規(guī)定,當(dāng)處理 UI 事件時(shí),需要在主線(xiàn)程中進(jìn)行,比如刷新頁(yè)面,添加控件等。

若把一些計(jì)算等耗時(shí)操作在子線(xiàn)程處理完成后,再回到主線(xiàn)程處理 UI 事件時(shí),需要先切換到主線(xiàn)程。

核心邏輯/代碼

保證 UI 事件在主線(xiàn)程中執(zhí)行,可以直接使用 DispatchQueue.main.async{}處理。

這里在使用這個(gè)代碼之前先用Thread.current.isMainThread判斷當(dāng)前線(xiàn)程是否已經(jīng)是主線(xiàn)程,如果不是,再調(diào)用DispatchQueue.main.async{}執(zhí)行 UI 事件。

這樣的處理,是為了減少不必要的線(xiàn)程切換的開(kāi)支

示例代碼

func UIEventAtMain() {
    // 判斷當(dāng)前線(xiàn)程是否是主線(xiàn)程
    if Thread.current.isMainThread {
        // UI 事件
    } else {
        // 切換到 main 線(xiàn)程,處理
        DispatchQueue.main.async {
            UIEventAtMain()
            
            // 結(jié)束事件,防止造成遞歸循環(huán)
            return
        }
    }
}
?著作權(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)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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