我可以像这样在Swift中连接两个字符串:
var c = "Hello World" c += "!"
这会创建一个新字符串吗?(分配一个新的内存块,复制原始字符串,连接"!“)字符串并返回新内存。)或者,它是否在适当的位置更新原始字符串(仅在原块不能适应该字符时分配新的内存块)。
发布于 2017-07-21 12:47:59
不,它不制造新的副本。如您所见,原始字符串具有changed.But --地址保持不变。
发布于 2017-07-21 12:54:58
正如苹果文档中所说的:https://developer.apple.com/documentation/swift/string
在性能优化部分:“虽然Swift中的字符串具有值语义,但字符串使用写复制策略将其数据存储在缓冲区中。然后,该缓冲区可以由不同的字符串副本共享。字符串的数据只有在多个字符串实例使用相同缓冲区时,在变异时才被懒散地复制。因此,在任何变化操作中的第一个操作可能会花费O(n)时间和空间。”
IOs使用复制即写,因此,如果多个进程使用相同的变量,或者有多个副本(我不完全理解这个部分),它就会复制,但是如果变量只用于一个进程,并且只有一个副本,那么您可以随意修改它,而不必生成副本。
https://stackoverflow.com/questions/45237970
复制相似问题