IOS mutlithread特性:
- 通常不直接fork thread,較常用Queue去管理
ex: DispatchQueue.main.async { .... }
- Main thread負責所有UI updates
當我們希望用main thread去更新UI,我們只需要用 DispatchQueue.main.async { update UI code }來確保更新UI的code是在main thread下執行
若是下載資料等長時間的任務,我們不能夠用main thread來執行,否則會導致使用者操作app時,UI無法及時刷新導致不好的使用者體驗(在Android稱這種狀況為ANR - Application Not Responding),所以我們要用DispatchQueue.global().async { long task code }方法來讓長時間的任務在非main thread中執行
以下為範例:
DispatchQueue.global().async { //非main thread負責下載資料
downloadData() {
(data) -> Void in
DispatchQueue.main.async { //main thread負責更新UI
// Update the UI
}
}
}
ref: https://learnappmaking.com/grand-central-dispatch-swift/