我可以像这样在Swift中连接两个字符串:
var c = "Hello World"
c += "!"
这会创建一个 new 字符串吗? (分配一个新的内存块,复制原始字符串,连接“!”字符串并返回新内存。)或者,它是否更新原始字符串(如果原始块可以分配新的内存块)不适合这个角色。
答案 0 :(得分:2)
答案 1 :(得分:1)
正如苹果文档中所述:https://developer.apple.com/documentation/swift/string
在性能优化部分: "尽管Swift中的字符串具有值语义,但字符串使用写时复制策略将其数据存储在缓冲区中。然后,该缓冲区可以由字符串的不同副本共享。当多个字符串实例使用相同的缓冲区时,字符串的数据仅在变异时被懒惰地复制。因此,任何变异操作序列中的第一个可能花费O(n)时间和空间。"
IO使用copy-on-write,因此如果多于1个进程使用相同的变量,或者有多个副本(我不完全理解这部分),它会复制,但如果变量是仅用于1个进程且只有一个副本,然后您可以根据需要进行变异而不生成副本