重用时 NSMutableArray removeAllObjects 与 new

NSMutableArray removeAllObjects vs new when reusing

在 ARC 下,removeAllObjectsNSMutableArray 上对于 CPU(明确地单独释放对象)是否会比简单地执行 myArray = [NSMutableArray new]; 并让 ARC在下一轮释放时捕获整个释放的内存块?

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

某些代码必须在 NSMutableArray 内循环遍历该数组,并对其所有非 nil 对象调用 release。如果在 ARC 内部或 NSMutableArray 内部执行的代码之间存在差异,则不应引起注意,因为昂贵的部分不是循环开销,而是 release 的实际调用和潜在的释放关注它。

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