之前面試感覺莫名其妙被刷掉,回家之后搜到了部分問題才恍然大悟,在此整理一下。
- 下面代碼的輸出結果
print(1)
DispatchQueue.main.sync {
print(2)
}
print(3)
當時我天真地覺得代碼在主線程中同步執行,輸出結果應該是
1
2
3
這里正確的結果應該是:
1
原因是第二行代碼造成了主線程死鎖。包含print(2)的閉包被加入主線程中同步執行,主線程必須等待閉包中的代碼執行后才能往下繼續;然而主線程又被該行代碼阻塞,處于等待狀態,所以該閉包中的內容永遠無法執行,實際工程會直接crash。