在 ARC 下,removeAllObjects
在 NSMutableArray
上对 CPU 来说会比简单地执行 myArray = [NSMutableArray new] 更强烈(明确地单独释放对象) ;
让 ARC 在下一轮发布时捕获整个释放的内存块?
我可以用 2 段代码对此进行测试,但由于优化等原因,我真的只是对机制感到好奇。从 C
的角度来看,调用所有要释放的对象听起来更激烈,但也许 Objective-C 中的 dealloc
树对于 ARC 来说足够高效,可以在速度相等?
最佳答案
一些代码必须在 NSMutableArray
中循环遍历该数组,并在其所有非 nil
对象上调用 release
。如果在 ARC 内部或 NSMutableArray
内部执行的代码之间存在差异,则应该不会引起注意,因为昂贵的部分不是循环开销,而是 release< 的实际调用
和它后面的潜在释放。
不过,还有一个更重要的区别:当您调用 removeAllObjects
时,数组会保留其内部存储空间,因此在您下次开始向其追加时它不必增加其内部大小。如果您的使用模式要求将大量项重复添加到同一个数组,调用 removeAllObjects
可能会为您节省一些分配/重新分配周期。
关于ios - 重用时 NSMutableArray removeAllObjects 与 new,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37072678/