應(yīng)用場景
iOS 機制規(guī)定橄杨,當(dāng)處理 UI 事件時七芭,需要在主線程中進行素挽,比如刷新頁面,添加控件等抖苦。
若把一些計算等耗時操作在子線程處理完成后毁菱,再回到主線程處理 UI 事件時米死,需要先切換到主線程锌历。
核心邏輯/代碼
保證 UI 事件在主線程中執(zhí)行,可以直接使用 DispatchQueue.main.async{}
處理峦筒。
這里在使用這個代碼之前先用Thread.current.isMainThread
判斷當(dāng)前線程是否已經(jīng)是主線程究西,如果不是,再調(diào)用DispatchQueue.main.async{}
執(zhí)行 UI 事件物喷。
這樣的處理卤材,是為了減少不必要的線程切換的開支
示例代碼
func UIEventAtMain() {
// 判斷當(dāng)前線程是否是主線程
if Thread.current.isMainThread {
// UI 事件
} else {
// 切換到 main 線程,處理
DispatchQueue.main.async {
UIEventAtMain()
// 結(jié)束事件峦失,防止造成遞歸循環(huán)
return
}
}
}