面试小记

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

  1. 下面代码的输出结果
print(1)
DispatchQueue.main.sync {
    print(2)
}
print(3)

当时我天真地觉得代码在主线程中同步执行,输出结果应该是
1
2
3

这里正确的结果应该是:
1

原因是第二行代码造成了主线程死锁。包含print(2)的闭包被加入主线程中同步执行,主线程必须等待闭包中的代码执行后才能往下继续;然而主线程又被该行代码阻塞,处于等待状态,所以该闭包中的内容永远无法执行,实际工程会直接crash。

你可能感兴趣的:(面试小记)