在不可变数组(NSArray)上执行时,subarrayWithRange是否会创建副本?

时间:2009-12-05 03:32:09

标签: objective-c

假设我有一个不可变的NSArray并想要创建几个子数组。我可以在原始数组上调用subarrayWithRange并获得一个新的NSArray。新副本是否与旧副本共享内存区域?

在最坏的情况下,我可能最终为原始数组的每个元素创建一个子数组(从该元素开始并在原始数组的末尾结束),因此这在线性和正方形之间产生差异记忆使用模式。

2 个答案:

答案 0 :(得分:3)

不幸的是,Apple的实施不是开源的,所以我们无法确定。但是,从简单的测试来看,它似乎确实创建了子数组的新副本。

虽然你说得对,这可能会导致方形内存使用模式,但在某些情况下它也很有效。想象一下,你有一个非常大的数组,你只需要一个小的子数组。如果子数组重用后端数组,则大数组不会被释放。

答案 1 :(得分:0)

在Instruments中查看它,看看在创建子阵列时分配了多少内存。