在ARC下,removeAllObjects
上的NSMutableArray
对于CPU来说会更加强烈(明确地单独释放对象)而不仅仅是myArray = [NSMutableArray new];
而只是让ARC捕获整个释放的内存 - 阻止它下一轮发布?
我可以使用2段代码对此进行测试,但由于优化,我真的只是对机制感到好奇。从C
的角度来看,调用所有被释放的对象听起来感觉更强烈,但是Objective-C中的dealloc
树可能足够有效,ARC可以以相同的速度执行此操作吗?
答案 0 :(得分:4)
某些代码必须遍历NSMutableArray
内的该数组,并在其所有非release
对象上调用nil
。如果在ARC内部或NSMutableArray
内部代码之间存在差异,则它应该不明显,因为昂贵的部分不是循环开销,而是{{1}的实际调用跟随它的潜在释放。
但是有一个更显着的区别:当你调用release
时,数组会保留其内部存储空间,因此下次开始追加它时就不必增加其内部大小。如果您的使用模式要求将大量项重复添加到同一个数组,则调用removeAllObjects
可能会为您节省一些分配/重新分配周期。