應(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
}
}
}