面試小記

之前面試感覺莫名其妙被刷掉,回家之后搜到了部分問題才恍然大悟,在此整理一下。

  1. 下面代碼的輸出結果
print(1)
DispatchQueue.main.sync {
    print(2)
}
print(3)

當時我天真地覺得代碼在主線程中同步執行,輸出結果應該是
1
2
3

這里正確的結果應該是:
1

原因是第二行代碼造成了主線程死鎖。包含print(2)的閉包被加入主線程中同步執行,主線程必須等待閉包中的代碼執行后才能往下繼續;然而主線程又被該行代碼阻塞,處于等待狀態,所以該閉包中的內容永遠無法執行,實際工程會直接crash。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容