gpt4 book ai didi

swift - 为什么有时在编译以优化速度时 swift 静态变量初始化不正确

转载 作者:行者123 更新时间:2023-12-04 15:05:59 25 4
gpt4 key购买 nike

我最近遇到一个问题,有时 swift 静态变量初始化不正确。编译速度优化时可能会重现此问题(这是 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不应初始化,但在发布模型中编译或优化速度(-o)时, some value init将被打印,这意味着 someValue已初始化。但在 if 中没有任何打印语句被执行。

为什么编译做这个优化?这会在 someValue 时导致一些逻辑错误。的 init 块做一些复杂的工作。

最佳答案

这是一个报告为 SR-11494 的错误.存储类型属性应该在第一次访问时延迟初始化。根据 Documentation
但是,在这种情况下,当使用优化标志编译时,在编译时调用存储的 Type 属性的初始化。
错误更新 (12/08/2020):
此问题已在 Swift 5.3 中修复

关于swift - 为什么有时在编译以优化速度时 swift 静态变量初始化不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58013632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com