【发布时间】:2019-07-18 11:44:30
【问题描述】:
我们都知道swift中的数组是值类型,这意味着在复制或分配一个数组后,修改新数组不会影响旧数组。如:
var a = ["a", "b", "c", "d", "e"]
var b = a
b[0] = "1"
print(a[0]) // a
print(b[0]) // 1
但我想知道数组怎么会这样工作。 'var' 数组的长度是动态的。通常我们必须分配一些堆内存来包含所有的值。我确实偷看了一些 struct Array 的源代码,数组的下划线缓冲区是使用类实现的。但是当复制一个包含类或内存指针成员的结构时,类和分配的内存默认不会复制。
那么一个数组在复制或分配给另一个缓冲区时如何复制它的缓冲区呢?
【问题讨论】:
-
文档developer.apple.com/documentation/swift/array中提到了“写时复制优化”
-
@MartinR Greate 文章,非常感谢
标签: swift