在观看了使用 value type 构建更好的应用程序之后。在他们制作的 Photoshop 示例中,他们说
在该图表的两个实例中唯一被复制的是包含该人衬衫的瓷砖。因此,即使我有两个不同的文档,旧状态和新状态,但我必须使用的唯一新数据是此人衬衫中包含的瓷砖。
所以我开始想知道这两个数组在内存中的样子。所以我做了一个小实验。
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)。
所以我很困惑,我什至还没有改变数组。他们似乎复制了整个数组?那我哪里误会了?
我用来打印结构地址的函数是使用@nschum 在这个问题中提供的方法。
func address(o: UnsafePointer<Void>) {
let addr = unsafeBitCast(o, Int.self)
print(NSString(format: "%p", addr))
}
这不是这个问题的重复问题。我在问语言羽毛,另一个是关于编程技能。