iOS函数式编程

面试小记

2018-05-04  本文已影响2人  梵_尘

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

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

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

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

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

上一篇 下一篇

猜你喜欢

热点阅读