待办事项
[[NSMutableArray alloc] init];
和
[[NSMutableArray alloc] initWithCapacity:0];
编译成完全相同的东西?
如果它们不同,那么在内存和运行时性能方面如何以及哪种形式“更好”?
答案 0 :(得分:18)
不,他们的行为不会相同。 init
将创建一个具有一些未知但很可能非零容量的数组 - 无论作者认为在大多数情况下它是合理的默认值。 initWithCapacity:0
将请求一个绝对没有分配空间的数组。这意味着取决于NSMutableArray
实现:它可能不允许容量为0并且行为与init
完全相同,或者它可能不会立即分配任何内容而是分配一些数量(与{{相同) 1}},可能,或许不是)当你第一次需要它时。
哪个“完美”表现完全取决于您对阵列的期望。 init
说:“我对这个阵列没有任何期望;我要么加入也要删除它,否则它可能会非常小。” -init
说“在可预见的未来,我希望这个阵列只有这么多元素。”
关于我期望-initWithCapacity:
合理的唯一地方是,如果您要创建一个您不希望在相当长的时间内填充任何内容的数组。
请注意,标准性能警告适用于此:除非您对其进行分析并确定它,否则它可能不是问题。我无法想象一种情况(成千上万的{{1}}个物体除外),这两个物体之间的区别很大。