arrays - 在 Swift 中定义数组容量(以字节数为单位)

标签 arrays swift memory-management

我正在开发的一个程序正在执行一些字符串操作,其中包含单词的输出数组将与输入数组相同或小于输入数组。例如,输入数组包含 100 个元素,每个元素是一个单词(长度可变)。经过处理后,只有99个元素。假设输入数组为 500 字节。我能否告诉 Swift 确保输出数组的长度至少为 500 字节,以便在添加元素时不需要多次将它们移动到内存的不同部分,从而为元素提供更多空间?

最佳答案

可能存在误解。 Array 存储某种类型 T 的值,并且每个 这些值具有相同的大小。在您的情况下, [String] 类型的数组保存值 struct String 类型,具有固定大小(就像 Swift 中任何类型的值一样)。

字符串如何在实现细节中设法保存可变数量的字符。 如果您检查 Swift 源代码,您会发现 struct String 包含 指向实际字符串存储的指针(通过引用计数来实现 具有写时复制的值语义)。

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

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

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

var word = ""
word.reserveSpace(1000)

但是您不会在数组中保留容量来容纳总数 其字符串元素的字符数。

关于arrays - 在 Swift 中定义数组容量(以字节数为单位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46752456/

相关文章:

c++ - 获取在 operator new 中分配的对象类型

c++ - 在指向对象的指针上调用 delete [] 时出现 BLOCK_TYPE_VALID 错误

ios - 许多 UIImageView 的内存管理

arrays - Swift - 为 UITableViewController 读取相对复杂的数组

arrays - 从单例创建一个通用数组

javascript - 使用 json_encode() 将 php 数组转为 javascript

Python MySql 生成查询数组

ios - 如何安全地移除观察者 (Swift)

swift - 如何检测应用程序是否被 ViewController 中的通知操作打开

swift - NotificationCenter 未因网络更改而触发