我最近遇到一个问题,有时快速静态变量未正确初始化。编译以进行速度优化时(这是Xcode中发布模型的默认优化级别),可能会重现此问题。请参阅以下代码:
class MainView: UIView {
static let someValue: Int = {
print("some value init")
return 1
}()
}
class ViewController: UIViewController {
var falseValue = false
var falseValue2 = false
override func viewWillAppear(_ animated: Bool) {
if falseValue {
print(MainView.someValue)
}
if falseValue2 {
print(MainView.someValue)
}
}
}
对于上面的代码,MainView.someValue
不应该初始化,但是在发布模型中进行编译或针对speed(-o)优化时,some value init
将打印,这意味着someValue
已经被初始化。但是,不会if
执行任何print in 语句。
为什么要进行此优化编译?当someValue
init块执行一些复杂的工作时,这将导致一些逻辑错误。