Objective-c NSArray init与initWithCapacity:0

时间:2011-05-20 20:47:13

标签: iphone objective-c memory-management

待办事项

[[NSMutableArray alloc] init];

[[NSMutableArray alloc] initWithCapacity:0];

编译成完全相同的东西?

如果它们不同,那么在内存和运行时性能方面如何以及哪种形式“更好”?

1 个答案:

答案 0 :(得分:18)

不,他们的行为不会相同。 init将创建一个具有一些未知但很可能非零容量的数组 - 无论作者认为在大多数情况下它是合理的默认值。 initWithCapacity:0将请求一个绝对没有分配空间的数组。这意味着取决于NSMutableArray实现:它可能不允许容量为0并且行为与init完全相同,或者它可能不会立即分配任何内容而是分配一些数量(与{{相同) 1}},可能,或许不是)当你第一次需要它时。

哪个“完美”表现完全取决于您对阵列的期望。 init说:“我对这个阵列没有任何期望;我要么加入也要删除它,否则它可能会非常小。” -init说“在可预见的未来,我希望这个阵列只有这么多元素。”

关于我期望-initWithCapacity:合理的唯一地方是,如果您要创建一个您不希望在相当长的时间内填充任何内容的数组。

请注意,标准性能警告适用于此:除非您对其进行分析并确定它,否则它可能不是问题。我无法想象一种情况(成千上万的{{​​1}}个物体除外),这两个物体之间的区别很大。