Iphone initWithCapacity:在NSArray中

Iphone initWithCapacity:在NSArray中,iphone,Iphone,initWithCapacity:在NSMutableArray中声明,但我想用它初始化NSArray。有什么解决方案吗?使用initWithCapacity:初始化NSArray是没有意义的,因为您无法随后添加对象。中没有对象的NSArray的实际容量为0。您真正想要实现什么?由于NSArray对象是不可变的(无法更改它们包含的对象),因此调整NSArrays的容量是没有用的 容量是一个数组在不重新分配内存的情况下可以包含的对象数。它仅用于优化。只需使用initWithCapacity:创建一

initWithCapacity:
NSMutableArray
中声明,但我想用它初始化
NSArray
。有什么解决方案吗?

使用
initWithCapacity:
初始化
NSArray
是没有意义的,因为您无法随后添加对象。中没有对象的
NSArray
的实际容量为0。您真正想要实现什么?

由于
NSArray
对象是不可变的(无法更改它们包含的对象),因此调整
NSArray
s的容量是没有用的


容量是一个数组在不重新分配内存的情况下可以包含的对象数。它仅用于优化。

只需使用
initWithCapacity:
创建一个
NSMutableArray
,将其填满,然后从中创建一个
NSArray

您可以使用:

NSArray *_immutableArray = [_mutableArray copy];
...
[_immutableArray release];
或:

或:


这个问题与他的答案完全无关。我正在实现一个固定大小的缓存,发现
NSArray
符合这个标准。使用容量初始化空阵列是有意义的,不是吗?这可能比只使用默认大小并让其自行扩展更昂贵。测量它并用数字报告。我认为在不分析源代码的情况下,要获得关于哪个更快的结论是非常困难的。有这么多的变量,比如要添加的元素数量、内存条件(以及realloc的性能)等等。您完全可以测试这些声明。在这样的测试中,您如何根据经验量化内存碎片(这会影响realloc的速度)?
NSArray *_immutableArray; 
[_immutableArray initWithArray:_mutableArray];
...
[_immutableArray release];
NSArray *_immutableArray = [NSArray arrayWithArray:_mutableArray];