gpt4 book ai didi

swift - 为什么指向新对象后内存地址相同?

转载 作者:搜寻专家 更新时间:2023-11-01 06:27:32 26 4
gpt4 key购买 nike

我在 Playground 上设置了以下内容,并希望最后两个内存地址相同。我将 person2 指向 person1 然后 person1 被重新分配给一个新的 Person 所以 person2 应该有相同的内存地址人 1。

为什么它和我们第一次分配时的地址一样?

class Person {
var name = ""
}

var person1 = Person()
print(Unmanaged.passUnretained(person1).toOpaque())
//0x0000600000043ea0

var person2 = person1

person1 = Person()
print(Unmanaged.passUnretained(person1).toOpaque())
//0x00006000000568f0
print(Unmanaged.passUnretained(person2).toOpaque())
//0x0000600000043ea0

最佳答案

下面是一个表,随着代码的进行,它会跟踪 person1person2 指向的对象:

// code                   | person1 points to: | person2 points to: 
// -----------------------+--------------------+--------------------
// start | 0xXXXXXXXXXXXXXXXX | 0xXXXXXXXXXXXXXXXX
var person1 = Person() // | 0x0000600000043ea0 | 0xXXXXXXXXXXXXXXXX
let person2 = person1 // | 0x0000600000043ea0 | 0x0000600000043ea0
person1 = Person() // | 0x00006000000568f0 | 0x0000600000043ea0

X 代表未初始化的内存,它可以有任何值(来自之前存储在那里的任何值)。

person1person2 是变量,存储在堆栈中,其内容是(引用)Person 对象的地址。为了清楚起见,我们给 Person 对象命名:

  • 人物对象 X,位于 0x0000600000043ea0
  • 人对象 Y,位于 0x00006000000568f0

Object graph showing reference type aliasing.

关于swift - 为什么指向新对象后内存地址相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52012733/

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