在调用初始化之前加载到内存中的 Swift 属性

标签 swift

在我的应用程序中,属性似乎在被调用之前就已加载到内存中。要么我的理解有问题,要么我忽略了什么。为了说明我在点击登录后不久就设置了一个断点,正如您在图像中看到的那样(第 226 行):

enter image description here

我希望在第 230 行初始化属性 let user = User()。所以我不知道 user 怎么可能已经加载到内存中,如左下角所示附上图片。

为什么会这样?
这是幕后发生的某种代码优化吗?

我可以确认 user 在此之前没有被加载/初始化(它不是类属性)。此外,我可以确认注释掉第 230 行及以下会导致用户未被加载,因此看起来第 230 行是导致用户被加载的原因。但奇怪的是,这发生在它被调用之前,因为我在第 226 行用断点暂停了执行。

最佳答案

能够阅读变量列表很重要。 始终显示所有局部变量,即使它们尚未初始化,因为已经为它们预留了存储。因此,在初始化之前,显示了变量,但它的 可能是伪造的。我的猜测是该值 伪造的。它它是一个用户,因为这是它的类型,但在您查看时,它指向垃圾,您应该忽略它。执行路径经过初始化后,该值会发生变化,成为真正的值。

(但是,如果这是一个发布版本,那么可能确实有某种优化,因为这是一个常量,其值不依赖于前面的代码,所以它可以分配在任何时候。但你不应该调试发布版本。)

关于在调用初始化之前加载到内存中的 Swift 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37951604/

相关文章:

ios - 内存泄漏测试

ios - 隐藏目标 VC-Swift 中的开关

ios - 如何从一个 View 切换到同一个 View ?

swift 3 : capture strong self in @escaping closure without asynchronous work

swift - XCode 7 自动完成功能无法正常工作

swift - NSTextField 处于编辑模式时的额外空白

swift - 如何在 Swift 中有效使用 CFSwapInt32BigToHost 、 CFSwapInt16BigToHost

ios - 在选取器 (SwiftUI) 上选择特定值时如何更改 var

swift - 快速在 2 个单独的 textView 上进行 textViewDidBeginEditing

swift - 在获取 JSON 值中发布 SWIFT Alamofire