【问题标题】:iPad/iPhone interesting memory observationiPad/iPhone 有趣的记忆观察
【发布时间】:2010-08-19 15:08:51
【问题描述】:

我有一个相当大的 iPad 应用程序,当我在 xcode 调试模式下运行该应用程序时,它在活动监视器中显示大约 50 MB,并且内存增长缓慢。 (大约每 30 秒 0.1 MB。)但是当我直接从模拟器(已经安装在模拟器中)运行应用程序时,它在活动监视器中显示大约 10 MB 并且内存没有增长。(它的常数)。我已经通过仪器检查了性能,没有出现泄漏。

有谁知道为什么要为上述两种情况显示不同的内存详细信息,哪一种是正确的?

还有一种方法可以在控制台中以编程方式打印应用程序消耗的内存

【问题讨论】:

  • 这一切都来自模拟器吗?您应该避免在模拟器中进行内存调整,因为它为您提供的结果与在实际设备上运行时截然不同。
  • 嗨布拉德,你如何在实际设备中测试内存?在设备中运行时,我们从哪里获得统计细节?提前感谢您的帮助。

标签: iphone objective-c ipad


【解决方案1】:

活动监视器是跟踪内存增长的一种通常无用的方法。 RPRVT 有无数种不同的贡献者,其中一些是完全不直观的。活动监视器当然可以用来判断“呃,哦,它正在增长”,但除此之外没有太多。

使用 Instruments 跟踪内存增长。

当您说“在调试模式下运行”时,您是否进行了僵尸跟踪或分配信息跟踪等配置?这将有助于内存增长。

除此之外,分配工具通常会向您展示促进增长的因素。

还有没有办法在控制台中以编程方式打印应用程序消耗的内存?

这样的绝对数字不是很有用。应用正在增长是不好的,但一个原始数字不会告诉你为什么比 Activity Monitor 更有用。

使用仪器。 :)

【讨论】:

  • 嗨,bbum,感谢您的回复。是的。我的应用中有 NSZombieEnabled。我用过乐器。在泄漏中,它没有显示任何泄漏。在分配中,分配的数量非常多,很难立即确定是什么促成了增长。有没有办法清除所有内存快照并从头重新捕获?那么识别新分配的对象而不是从应用程序开始分配的所有对象可能更容易?
  • NSZombieEnabled 将导致对象永远不会被释放(除非您设置 NSDeallocateZombies=NO)。它可能不会显示为泄漏,因为它是故意的。
  • 嗨 bbum 和 tc,我已禁用 NSZombieEnabled。现在它完美地工作了。非常感谢您的提示。我不知道。再次感谢
  • '除此之外,分配工具通常会显示你对增长的贡献' -- 如何?当我尝试使用它时,它向我展示了一千个小东西,但我不认识其中任何一个在说‘啊哈!这个 UIWebView 分配了 5GB 的内存,是我的内存崩溃的原因!'
  • 1.打开“跟踪实时分配”(或任何名称)。 2. 运行您的应用程序。 3. 按字节数列排序。这将按照占用内存最多的事物类型进行排序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
相关资源
最近更新 更多