在该图的两个实例中唯一复制的是包含该人衬衫的瓷砖。因此,即使我有两个不同的文档,旧状态和新状态,我必须消耗的唯一新数据是这个人的衬衫中包含的瓷砖。
所以我开始想知道这两个数组在内存中是怎么样的。所以我做了一点实验。
struct Test {
var i: Int
var j: Int
}
var valueArray = [Test(i: 1, j: 9), Test(i: 2, j: 7)]
var valueArray2 = valueArray
当我打印valueArray和valueArray2的地址时,它们不一样 “也许他们通过数组中的商店指针实现这一点?” 但是当我使用lldb打印内存时,它们实际上只是4 Int(1,9,2,7) 所以我很困惑,我还没有更改阵列。他们似乎制作了整个阵列的副本?那么我误解了哪里? 我用来打印struct的地址的函数是使用@ build better apps with value type中@nschum提供的方法。
func address(o: UnsafePointer<Void>) {
let addr = unsafeBitCast(o, Int.self)
print(NSString(format: "%p", addr))
}
这不是this question的重复问题。我问的是语言羽毛,另一个是编程技巧。