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

时间:2016-06-21 18:09:33

标签: swift

在我的应用程序中,看起来该属性在它甚至被调用之前已加载到内存中。要么我的理解有问题,要么我忽略了一些问题。为了说明我在照片上点击后很快就设置了断点,如图所示(第226行):

enter image description here

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

为什么会这样? 这是在引擎盖下发生的某种代码优化吗?

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

2 个答案:

答案 0 :(得分:3)

能够读取变量列表非常重要。 所有局部变量始终显示,即使它们尚未初始化,因为已经为它们预留了存储。因此,在初始化之前,会显示变量,但其可能是假的。我的猜测是的值是伪造的。它它是一个用户,因为它是它的类型,但在你看的时候,它指向垃圾,你应该忽略它。在执行路径通过初始化之后,该值将更改并将成为实际值。

(但是,如果这是Release版本,那么可能确实存在某种优化,因为这是常量,其值不依赖于前面的代码,因此可以在任何时候。但你不应该调试Release版本。)

答案 1 :(得分:2)

它还没有被加载到内存中。调试器在范围内查看变量并显示它,但它显示的数字是内存中的任何内容。如果您单步执行let user...语句,您应该会看到变量的值更改为更像您图片中其他对象地址的内容。