gpt4 book ai didi

swift - 字符串的子字符串重用原始字符串的存储?

转载 作者:行者123 更新时间:2023-11-28 10:06:13 26 4
gpt4 key购买 nike

我正在浏览 swift docs 的字符串和字符部分

这里提到:

substrings aren’t suitable for long-term storage—because they reuse the storage of the original string, the entire original string must be kept in memory as long as any of its substrings are being used.

我尝试在 Playground 上对此进行测试,但发生的情况似乎与上面提到的不同。我在 Playground 上运行了以下代码:

var greeting : String? = "Hello, world!"
let index = greeting!.firstIndex(of: ",") ?? greeting!.endIndex
let beginning = greeting?[..<index]
print(beginning ?? "")
greeting = nil
print(beginning ?? "")

我期望打印的内容:

"Hello"
""

但是打印出来的是:

"Hello"
"Hello"

不应该将原始字符串设置为 nil 导致子字符串也被删除吗?

最佳答案

行为是正确的。

子字符串共享原始字符串的引用计数器。如果原始字符串被破坏,引用仍然存在。

请收看WWDC 2017: What's new in Swift从 36:00 开始

实际上,甚至引用的文本也证实了这种行为,因为它说在对字符串进行切片后,整个字符串都保存在内存中。

关于swift - 字符串的子字符串重用原始字符串的存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53034572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com