Objective c 正在初始化NSMutableArray(带和不带容量)

Objective c 正在初始化NSMutableArray(带和不带容量),objective-c,xcode,nsmutablearray,Objective C,Xcode,Nsmutablearray,可能重复: 以下代码行之间的区别是什么?确切的优势和劣势是什么?假设下一步我将执行3 addObject操作 NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity: 5]; NSMutableArray *array = [[NSMutableArray alloc] init]; 通常,与不同大小的面向对象语言和数组的区别在于:您将获得的开销和内存级别的页面错误 换句话说,假设您有一个对象在内存中请求5个空间(就

可能重复:

以下代码行之间的区别是什么?确切的优势和劣势是什么?假设下一步我将执行3 addObject操作

NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity: 5];
NSMutableArray *array = [[NSMutableArray alloc] init];

通常,与不同大小的面向对象语言和数组的区别在于:您将获得的开销和内存级别的页面错误

换句话说,假设您有一个对象在内存中请求5个空间(就像第一个示例一样),而第二个对象没有保留任何空间。因此,当一个对象需要添加到第一个对象时,内存中已经有足够的空间让它刚好进入,另一方面,未分配的对象必须首先请求内存空间,然后将其添加到数组中。在这个级别上,这听起来并不是很糟糕,但当阵列的大小增加时,这就变得更重要了

发件人:

阵列容量:

创建并返回一个NSMutableArray对象 足够的已分配内存,最初可容纳给定数量的对象。 ... 新阵列的初始容量。返回一个新的NSMutableArray对象的值 分配的内存足够容纳numItems对象


从功能上讲,这两个语句是相同的

在第一种情况下,您给运行时一个提示,即将向数组中添加五个对象,以便它可以(如果愿意)为它们预先分配一些空间。这意味着使用第一条语句进行的前五次
addObject:
调用可能会稍微快一些


但是,不能保证运行时只会忽略提示。我从不使用
initWithCapacity:
我自己。如果我遇到
addObject:
是一个显著的性能瓶颈的情况,我可能会尝试一下,看看情况是否有所改善。

这两个问题都不是完全重复的,尽管它非常接近最上面的问题。可能重复,这是一个很好的猜测,但事实并非如此。。。。看看杰里米的答案。@B嗯,我想这不是猜测。这是一个恰当的解释。而在杰里米的回答中,他用的可能是。@Saad不,真的,这只是猜测。阅读源代码(CFFoundation是开源的)。如果您请求一个具有100000个插槽的阵列,它不一定会提前分配所有这些插槽。数据结构比平面阵列稍微复杂一些,因此,文档有误导性,但并非完全错误。对——或者说,坦率地说:不要为暗示的版本而烦恼。