string - 绝对需要复制字符串的情况

标签 string swift

苹果文档说: “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/

相关文章:

swift - 条件绑定(bind)的初始化程序必须具有可选类型,而不是 'Todo?.Type'

ios - 更改 UITextInput 中的字体

ios - Swift 中获取和设置 UITextField 和 UITextView 的光标位置

Javascript:将字符串转换为完整的月份到日期对象

c++ - 我需要一些指导来编写哈希函数来对 ~160,000 个字符串进行排序

java - Java中将String格式的日志记录划分为列

java - 将字符串转换为日期错误解析

从 StringBuilder 进行 toString 转换的 Java 替代品

ios - 重新实例化 Storyboard导航栏按钮

iOS Swift 将应用移至后台