在 Swift 中,数组的大小可以根据需要动态增长,但似乎无法缩小。
var x: [Int] = []
for i in 0...1000 {
x.append(i)
}
for i in reverse(1000...0) {
x.removeAtIndex(0)
}
< p > x
的容量仍然很大。我也尝试过使用 removeLast()
并将其复制到一个新变量中,但似乎并没有减少容量。
在 Swift 中,数组的大小可以根据需要动态增长,但似乎无法缩小。
var x: [Int] = []
for i in 0...1000 {
x.append(i)
}
for i in reverse(1000...0) {
x.removeAtIndex(0)
}
< p > x
的容量仍然很大。我也尝试过使用 removeLast()
并将其复制到一个新变量中,但似乎并没有减少容量。
要重置容量
,请使用.removeAll(keepCapacity: false)
:
var x: [Int] = []
for i in 0...1000 {
x.append(i)
}
x.capacity // -> 1,532
x.removeAll(keepCapacity: false)
x.capacity // -> 0
如果您想在优化容量
后保留元素,则可以使用Array()
构造函数进行复制:
for i in 0...1000 {
x.append(i)
}
for i in reverse(0...999) {
x.removeAtIndex(0)
}
x.capacity // -> 1532
x = Array(x) // -> [1000]
x.capacity // -> 2
数组分配的内存大小的增加/减少是运行时内存管理的一部分。当数组中存储的元素数量减少时,内存分配可能受益于不直接释放内存。例如,可能会发生这样的情况,即在删除元素后,新元素被添加到数组中。在这种情况下,需要分配新的内存。
还要区分count
和capacity
之间的区别。