繁体   English   中英

Swift中的字符串连接是否会创建新副本?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM