ios - 重用时 NSMutableArray removeAllObjects 与 new

标签 ios objective-c performance nsmutablearray

在 ARC 下,removeAllObjectsNSMutableArray 上对 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/

相关文章:

java - 无法在没有 Moskito UI 的情况下找到 Moskito 与 java web 应用程序集成的解决方案

regex - 当传递正则表达式模式的文件时,Egrep 命令挂起

android - 如何用RecycleView展示分层数据结构?

ios Firebase 推送通知项目

ios - 如何确认我们的代码没有在 iOS 发布二进制文件中调用 NSAssert

android - 在 Unity 中影响移动设备 FPS 的因素

performance - 在 Go 中,非捕获闭包会损害性能吗?

ios - UIVIew 在 Storyboard 和 NIB 差异中调整大小

iphone - 如何将 AQGridView 合并到一个项目中?

ios - xcode 核心数据类中的数据类型不匹配