做
[[NSMutableArray alloc] init];
和
[[NSMutableArray alloc] initWithCapacity:0];
编译成完全一样的东西?
如果它们不同,那么在内存和运行时性能方面,哪种形式更“好”?
发布于 2011-05-21 04:59:34
不,它们的行为不会相同。init
将创建一个具有一些未知但最有可能非零容量的数组-无论作者认为在大多数情况下都是合理的默认值。initWithCapacity:0
将请求一个完全没有分配空间的数组。这意味着什么取决于NSMutableArray
实现:它可能不允许容量为0并且行为完全像init
,或者它可能不会立即分配任何东西,而是在您第一次需要它时分配一些量(可能与init
相同,也可能不分配)。
哪一个性能会“更好”完全取决于你期望如何使用数组。-init
说:“我对这个数组没有任何期望;我要么对它进行大量的添加和删除,要么它可能会非常小。”-initWithCapacity:
说,“我希望这个数组在可预见的将来不会超过这么多的元素。”
我唯一希望initWithCapacity:0
合理的地方是,如果你正在创建一个数组,而你在相当长的一段时间内都不希望填充任何东西。
请注意,这里适用标准的性能警告:这可能不是问题,除非您分析并确定它是问题。我真的无法想象这两者之间的差别会有多大(除了成千上万的NSMutableArray
对象)。
https://stackoverflow.com/questions/6077422
复制相似问题