在我的应用程序中,属性似乎在被调用之前就已加载到内存中。要么我的理解有问题,要么我忽略了什么。为了说明我在点击登录后不久就设置了一个断点,正如您在图像中看到的那样(第 226 行):
我希望在第 230 行初始化属性 let user = User()
。所以我不知道 user 怎么可能已经加载到内存中,如左下角所示附上图片。
为什么会这样?
这是幕后发生的某种代码优化吗?
我可以确认 user
在此之前没有被加载/初始化(它不是类属性)。此外,我可以确认注释掉第 230 行及以下会导致用户未被加载,因此看起来第 230 行是导致用户被加载的原因。但奇怪的是,这发生在它被调用之前,因为我在第 226 行用断点暂停了执行。
最佳答案
能够阅读变量列表很重要。 始终显示所有局部变量,即使它们尚未初始化,因为已经为它们预留了存储。因此,在初始化之前,显示了变量,但它的值 可能是伪造的。我的猜测是该值是 伪造的。它说它是一个用户,因为这是它的类型,但在您查看时,它指向垃圾,您应该忽略它。执行路径经过初始化后,该值会发生变化,成为真正的值。
(但是,如果这是一个发布版本,那么可能确实有某种优化,因为这是一个常量,其值不依赖于前面的代码,所以它可以分配在任何时候。但你不应该调试发布版本。)
关于在调用初始化之前加载到内存中的 Swift 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37951604/