【发布时间】:2016-04-08 03:27:18
【问题描述】:
看完build better apps with 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)。
所以我很困惑,我什至还没有改变数组。他们似乎复制了整个数组?那我在哪里误会了?
我用来打印struct地址的函数是使用@nschum在this question中提供的方法。
func address(o: UnsafePointer<Void>) {
let addr = unsafeBitCast(o, Int.self)
print(NSString(format: "%p", addr))
}
这不是this question 的重复问题。我问的是语言羽毛,另一个是关于编程技巧。
【问题讨论】:
-
确实创建了新变量,但内部表示将是相同的,并且将在内部写入时被复制。开发人员无法访问值类型的内部实现细节。
-
这不是该问题的重复问题。我问的是语言羽毛,另一个是关于编程技巧。