【发布时间】:2014-03-23 22:56:52
【问题描述】:
通常,“可变数组”类被实现为简单数组的包装器。当您在末尾添加元素时,包装器会分配更多内存。这是一种常见的数据结构,各种操作的性能是众所周知的。您在数组末尾获得 O(1) 元素访问、O(N) 插入和删除,或 O(1)(平均)插入和删除。但是NSMutableArray 是另一回事。例如docs 说[强调我的]:
注意:数组上的大多数操作需要恒定时间:访问元素、添加或删除元素在任一端 ,并替换一个元素。将元素插入到数组的中间需要线性时间。
那么,NSMutableArray 到底是什么?这是在某处记录的吗?
【问题讨论】:
-
AFAIK,它没有正式记录。通常使用以下两种方法之一:调整大小和复制,或多个数组,每个数组都覆盖范围的一部分。而且我认为 Apple 并不想正式承诺特定的设计,以便赋予他们重新设计的能力。
-
查看任何实现代码的最佳机会是从苹果搜索 CFLite 代码。至少,你可以在那里找到 CFArray。
-
只是猜测:可变数组以某种方式实现,即数组使用的内存块的末尾和开头有一些空闲内存。这就是在开头插入只需要恒定时间的方式。但是他们也写到其实不只是一个类,所以我也猜对不同的大小有不同的优化
标签: objective-c data-structures nsmutablearray foundation