苹果文档说: “Swift 的默认字符串复制行为可确保当函数或方法向您传递一个字符串值时,很明显您拥有该字符串值,无论它来自何处。您可以确信,除非您自己修改,否则您传递的字符串不会被修改。
在幕后,Swift 的编译器优化了字符串的使用,因此只有在绝对必要时才会进行实际的复制。这意味着在将字符串用作值类型时,您始终可以获得出色的性能。”
所以,也许这是一个愚蠢的问题,但是,在什么情况下绝对需要复制字符串
最佳答案
当您将字符串传递给函数,或将其分配给另一个变量时,语义表示 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
这样做的好处是您可以将大字符串传递给函数而不会产生实际复制内存的开销。您可以将相同的字符串从一个函数传递到另一个函数,如果它们都没有修改它,您将在内存中只有一个副本。
关于string - 绝对需要复制字符串的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29187432/