ios - Xcode 分配工具生成

标签 ios memory allocation xcode-instruments

我一直在 ARC 项目(在设备上运行)上使用 Instruments 以确保我正在清理所有废弃的内存。为此,我一直在使用分配生成工具并为同一操作拍摄我的堆快照 10-20 次。我感到困惑的是增长。有时增长为 0,然后有时增长了一些字节(从几个字节到几千字节不等)似乎在增加。但通常至少有几次迭代的增长为 0。

我的问题是:如果我的增长有时为 0,是否意味着我的内存管理是正确的?或者我还有问题需要查明吗?我知道内存可能需要几个周期才能“耗尽”,但即使在 >10 次迭代后仍在分配和剩余的内存又如何呢?

这似乎是一个关于 Instruments 解释的更普遍的问题,所以我省略了任何特定的代码。此外,我发现这种情况发生在各种堆快照场景中:拉动刷新、推送 View Controller 等。

编辑:我添加了一个 snapshot of my Instruments window .

最佳答案

我会说,如果你的 Action 循环有几次迭代导致分配了 0 个字节并且仍然存在,那么你的内存管理就很好并且没有泄漏。

您看到的增加(从几字节到几千字节)很可能来自操作系统或后台 Apple 代码,它们试图管理您正在执行的任务。一个简单的例子是,如果您第一次打开键盘,Apple 会为其分配从未释放的内存,因此您将看到您没有创建的“泄漏”内存。你所做的一切都有 Apple 运行的后台代码,你无法定义它想用内存做什么。它可能会缓存经常执行的特定操作,以便下次运行得更快。 Apple 的整个哲学是应用程序流畅运行,因此用户体验是最好的。操作系统在后台为实现这一目标所做的工作可能是间歇性的,并可能导致内存未释放。

检查堆快照,了解哪些对象已分配但未释放。如果您可以将这些对象跟踪到您的代码,然后修复它,如果您不能,那么很可能是可以避免或无法避免的操作系统分配。就像我刚才说的,如果你得到很多 0 增加,那么我不会担心,因为这些间歇性操作系统增加。

关于ios - Xcode 分配工具生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21855998/

相关文章:

ios - 在 iPhone 应用程序中在 Facebook 上共享时显示警告消息

c++ - 无法删除 unsigned char* 数组

c++ - 动态分配的指针数组中的悬挂指针

c - 尝试找出在为数组分配的堆内存中分配值期间的错误

ios - 在不损失质量的情况下在 Objective-C 中截取屏幕截图

objective-c - 如何在 iOS 的 Objective-C 中创建和保存 .rtf、.doc、.docx

ios - CoreData + iCloud + 级联删除 - 如何处理?

C++ 释放结构使用的所有内存

linux - 我可以保护两个进程之间的内存吗

c - 如何在 C 中动态定义矩阵