在Swift

时间:2017-10-15 06:47:32

标签: arrays swift memory-management

我正在处理的程序正在进行一些字符串操作,其中包含单词的输出数组将与输入数组相同或更小。例如,输入数组包含100个元素,每个元素是一个单词(变量长度)。操纵后,只有99个元素。让我们说输入数组是500字节。我可以告诉Swift确保输出数组的长度至少为500字节,这样在添加元素时,它不需要将它们移动到内存的不同部分,为元素提供更多空间吗?

1 个答案:

答案 0 :(得分:0)

可能存在误解。 Array存储某些类型T的值,以及每个类型的值 这些值具有相同的大小。在您的情况下,类型[String]的数组包含值 类型为struct String的类型具有固定大小(如Swift中任何类型的值)。

字符串如何管理在实现细节中保存可变数量的字符。 如果您检查Swift源代码,那么您将看到struct String包含 指向实际字符串存储的指针(该引用计算为实现 带有copy-on-write的值语义。

因此,您可以为给定的数量的元素保留空间以避免数组 添加元素时的重新分配:

var words: [String] = []
words.reserveCapacity(100)

您还可以在字符串的底层存储中保留空间,以避免重新分配 如果字符串被扩展:

var word = ""
word.reserveSpace(1000)

但是你不能保留数组中的容量来保存总数 字符串元素的字符。