[英]Does string concatenation in Swift make a new copy?
我可以像这样在Swift中连接两个字符串:
var c = "Hello World" c += "!"
这会创建一个新字符串吗? (分配一个新的内存块,复制原始字符串,连接“!”字符串并返回新的内存。)或者,它是否将原始字符串更新到位(如果原始块可以分配新的内存块)不适合角色)。
就像苹果文档中所说的那样: https : //developer.apple.com/documentation/swift/string
在“性能优化”部分中:“尽管Swift中的字符串具有值语义,但是字符串使用写时复制策略将其数据存储在缓冲区中。然后,该缓冲区可以由字符串的不同副本共享。字符串的数据是“只有在复制后才懒惰地复制,当一个以上的字符串实例使用同一缓冲区时,因此,任何序列的变异操作中的第一个都可能花费O(n)的时间和空间。”
IO使用写时复制,因此,如果有多个进程使用同一变量,或者具有多个副本(我不完全理解此部分),它将创建一个副本,但是如果变量仅用于一个进程并且只有一个副本,那么您可以根据需要对其进行变异而无需生成副本
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.