Apple文档说: “Swift的默认复制String行为确保当函数或方法传递给你一个String值时,很明显你拥有那个确切的String值,无论它来自何处。您可以确信,除非您自己修改,否则不会修改您传递的字符串。
在幕后,Swift的编译器优化了字符串的使用,因此只有在绝对必要时才会进行实际的复制。这意味着在使用字符串作为值类型时,您总能获得出色的性能。“
所以,也许是一个愚蠢的问题,但仍然是,复制字符串是绝对必要的情况
答案 0 :(得分:3)
当您将字符串传递给函数或将其分配给另一个变量时,语义会说Swift会复制它。
实际上,Swift只保留一个指向原始字符串的指针,因此内存中只有一个副本。当修改原始字符串或修改新副本时,必须进行复制。那时,有必要创建不同的副本。
请考虑以下代码:
var str = "this is my string"
var str2 = str // no copy is made here even though str2 is a copy of str
str2 += "!" // now a copy is made so str2 can be modified
这样做的好处是可以将大字符串传递给函数,而不会产生实际复制内存的开销。您可以将相同的字符串从函数传递给函数,如果它们都没有修改它,那么内存中只有一个副本。