NSMutableArray removeAllObjects 和 new 在重用时的区别

5
在ARC下,对于NSMutableArray上的removeAllObjects方法,显式释放每个对象是否比仅仅执行myArray = [NSMutableArray new];更加消耗CPU(并让ARC在下一轮释放中捕获整个释放的内存块)?我可以用两段代码来测试这个问题,但由于优化等原因,我只是好奇机制。从C的角度来看,调用所有对象进行释放似乎更加消耗资源,但也许Objective-C中的dealloc树足够高效,使得ARC以相同的速度执行此操作?
1个回答

5

有些代码必须循环遍历NSMutableArray中的数组,并对所有非nil对象调用release。如果在ARC内或NSMutableArray内执行代码之间存在差异,这不应该是明显的,因为昂贵的部分不是循环开销,而是实际调用release和可能随后进行的解除分配。

然而,还有一个更明显的区别:当您调用removeAllObjects时,数组保留其内部存储空间,因此下次开始附加到数组时,它将不必增加其内部大小。如果您的使用模式需要重复向同一数组添加大量项目,则调用removeAllObjects可以节省一些分配/重新分配周期。


有道理,谢谢!我只有两个非常大的数组,会分配许多(数千)条目。我将进行一些具体测试,以查看重复使用removeAllObject是否会在性能方面产生影响(即使是微不足道的)。 - user1467267

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接