我在 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
最佳答案
下面是一个表格,随着代码的进行,跟踪 person1
和 person2
指向的对象:
// 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 代表未初始化的内存,它可以具有任何值(来自之前存储的任何值)。
person1
和 person2
是变量,存储在堆栈中,其内容是 Person
对象的地址(引用)。为了清楚起见,我们给 Person
对象命名:
- Person 对象
X
,位于 0x0000600000043ea0 - Person 对象
Y
,位于 0x00006000000568f0
关于swift - 为什么指向new Object后内存地址是一样的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52012733/