Sco*_*ott 18 iphone memory-management objective-c
做
[[NSMutableArray alloc] init];
Run Code Online (Sandbox Code Playgroud)
和
[[NSMutableArray alloc] initWithCapacity:0];
Run Code Online (Sandbox Code Playgroud)
编译成完全相同的东西?
如果它们不同,那么在内存和运行时性能方面如何以及哪种形式"更好"?
Joh*_*eek 18
不,他们的行为不会相同.init将创建一个具有一些未知但很可能非零容量的数组 - 无论作者认为在大多数情况下是合理的默认值.initWithCapacity:0将请求一个绝对没有分配空间的数组.这意味着什么取决于NSMutableArray实现:它可能不允许容量为0并且行为完全如此init,或者它可能不会立即分配任何东西而是init在您第一次需要时分配一些数量(相同,可能或可能不相同) .
哪个将执行"更好"完全取决于您期望使用该阵列的方式.-init他说:"我对这个阵列没有任何期望;我要么加入也要删除它,否则它可能会非常小." -initWithCapacity:他说:"在可预见的未来,我希望这个阵列只有这么多元素."
关于我期望initWithCapacity:0合理的唯一地方是,如果你正在创建一个你不希望在相当长的时间内填充任何东西的阵列.
请注意,标准性能警告适用于此:除非您对其进行分析并确定它,否则它可能不是问题.我无法想象NSMutableArray这两种情况之间存在差异的情况(成千上万的物体除外).
| 归档时间: |
|
| 查看次数: |
5820 次 |
| 最近记录: |