Swift5 写入时复制 copy-on-write

如题所述

第1个回答  2022-07-05

swift 的数组是值类型,值类型的一个特点是在传递和赋值时进行复制。 swift 使用了 copy-on-write 来避免频繁复制带来的额外开销。只有当多个对象指向相同的资源,其中一个对象尝试修改资源内容时, copy 才会触发。

维基百科描述很清晰

苹果关于数组使用copy-on-write的文档

简单概述和演示:

可以看到,原本 numberArray1 和 numberArray2 指向同一地址,当 numberArray2 要添加 6 时,触发了 copy 操作,把源地址 0x0000600000eb5560 的内容 copy 了一份到新地址 0x00006000006b5750 ,然后在新地址上添加新元素 6 ,赋值给 numberArray2 。
最终 numberArray1 指向的地址没有改变, numberArray2 指向新的地址

虽然数组是值类型,但我们的赋值操作不会产生性能耗损,因为复制发生在有条件的内容改变时,而不是赋值的时候

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网