重新使用时,NSMutableArray removeAllObjects vs new

时间:2016-05-06 12:40:17

标签: ios objective-c performance nsmutablearray

在ARC下,removeAllObjects上的NSMutableArray对于CPU来说会更加强烈(明确地单独释放对象)而不仅仅是myArray = [NSMutableArray new];而只是让ARC捕获整个释放的内存 - 阻止它下一轮发布?

我可以使用2段代码对此进行测试,但由于优化,我真的只是对机制感到好奇。从C的角度来看,调用所有被释放的对象听起来感觉更强烈,但是Objective-C中的dealloc树可能足够有效,ARC可以以相同的速度执行此操作吗?

1 个答案:

答案 0 :(得分:4)

某些代码必须遍历NSMutableArray内的该数组,并在其所有非release对象上调用nil。如果在ARC内部或NSMutableArray内部代码之间存在差异,则它应该不明显,因为昂贵的部分不是循环开销,而是{{1}的实际调用跟随它的潜在释放。

但是有一个更显着的区别:当你调用release时,数组会保留其内部存储空间,因此下次开始追加它时就不必增加其内部大小。如果您的使用模式要求将大量项重复添加到同一个数组,则调用removeAllObjects可能会为您节省一些分配/重新分配周期。