当值类型(如struct)在复制时,复制的对象和元、原对象实际上在内存中指向同一个对象。当且仅当修改复制后的对象时,才会在内存中重新创建一个新的对象。举例:
//arrayA是一个数组,为值类型
let arrayA = [1,2,3]
//arrayB这个时候与arrayA在内存中是同一个数组,内存中并没有生成新的数组
let arrayB = arrayA
//arrayB被修改了,此时arrayB在内存中变成了一个新的数组,而不是原来的arrayA
arrayB.append(4)
从上面的代码可以看出,赋值的数组和原数组共享同一个地址,直到其中之一发生改变。这样设计使得值类型可以被多次复制而无需耗费多余的内存,只有变化的时候才会增加开销。因此内存的使用更加高效