之前面試感覺(jué)莫名其妙被刷掉领突,回家之后搜到了部分問(wèn)題才恍然大悟肮之,在此整理一下崩掘。
- 下面代碼的輸出結(jié)果
print(1)
DispatchQueue.main.sync {
print(2)
}
print(3)
當(dāng)時(shí)我天真地覺(jué)得代碼在主線程中同步執(zhí)行态秧,輸出結(jié)果應(yīng)該是
1
2
3
這里正確的結(jié)果應(yīng)該是:
1
原因是第二行代碼造成了主線程死鎖翼抠。包含print(2)的閉包被加入主線程中同步執(zhí)行咙轩,主線程必須等待閉包中的代碼執(zhí)行后才能往下繼續(xù);然而主線程又被該行代碼阻塞阴颖,處于等待狀態(tài)活喊,所以該閉包中的內(nèi)容永遠(yuǎn)無(wú)法執(zhí)行,實(shí)際工程會(huì)直接crash量愧。