【问题标题】:Memory issue warning in my app, but app doesn't consume a lot memory我的应用程序中出现内存问题警告,但应用程序不会消耗大量内存
【发布时间】:2016-08-15 19:53:12
【问题描述】:

我的应用程序出现内存不足的警告,然后它崩溃了。 但是当我查看内存消耗时,我无法识别我的应用程序的任何内存限制。我的设备上也看不到任何崩溃日志。

有人给我提示吗?

在我的 didReceiveMemoryWarning 中我设置了一个断点。

覆盖函数 didReceiveMemoryWarning() { super.didReceiveMemoryWarning() print("收到内存不足!!!"); }

然后我检查了内存,它看起来如下:

更新

我已经知道什么是内存泄漏,所以一般来说给我提示没有帮助。我很想知道我是否正确读取了内存使用情况,以及我们是否可以看到问题出在应用程序或一般环境上。 我多次运行我的应用程序并始终执行相同的操作(由代码自动执行),并且从 5 次开始它崩溃了一次。

【问题讨论】:

  • 您的设备是否有足够的空间来存储图像。?我
  • 你的意思是磁盘空间吗?我看到设置存储中有 493 MB 可用。
  • 似乎您正在从互联网上加载应用程序中的图像,如果您对图像资源处理不当,这可能就是原因。如果您的代码正在生成重复的图像资产,请检查仪器。并在 didReciveMemoryWarrning 中处理内存警告删除该函数中所有不必要的资产。
  • 我没有从 Internet 加载图像。我不知道你在哪里可以从我的信息中看到这个。我可以多次启动应用程序并执行相同的操作,但有时会遇到内存不足的问题。然后我用 XCOde 内存查看器检查,我看不到任何特殊的内存使用情况。我是不是看错截图了,还是我们根本不信任 Apple 的开发者工具。

标签: ios xcode memory memory-leaks


【解决方案1】:

内存不足警告可能由多种原因引起。如果您发现您的应用程序没有使用太多内存,并且没有由于内存使用而崩溃,那么就没有问题。

但总的来说,我认为有 3 件事可以触发警告:

  • 您的应用程序使用的内存过多(似乎并非如此)
  • 您打开的其他应用程序占用了您的大部分内存,这些应用程序将在警告时被操作系统杀死(可能是您的情况)
  • 您的应用程序内存消耗一直在上下跳跃,应该避免这种情况,操作系统可能会在这种情况下杀死您的应用程序(我希望您没有做任何可能产生这种情况的事情)

【讨论】:

  • 可能是第 3 种情况。但是,如果标准 XCODE 工具没有显示正确的措施(这只是我的假设),如何调试或监控它是真的。
  • 看看你的图表,它似乎很线性,但峰值似乎超过 200MB,这是相当多的。之后会触发警告,因此使用断点不会使您的应用程序在您遇到问题的地方停止。那么占用 200MB 内存的你在做什么呢?
  • 我正在用 CALayers 和 CATextlayers 绘制地图。移动时,手动缩放地图到目前为止我没有遇到任何问题。现在我正在自动移动/缩放地图以创建电影。我的自动移动大约每运行 5 次就会崩溃。
  • 但这仍然不足以崩溃。如果您查看右侧的饼图,您会发现其余应用程序使用的内存与您剩下的大约 300MB 内存一样多,因此我可以假设至少有一个应用程序被杀死以获得足够的可用内存,从而触发了警告。
  • 尝试分析你的代码在绘图时做了什么。注释掉一些东西,看看是什么产生了大部分的记忆。然后,当您觉得您有足够的信息但不知道如何优化它时,我建议您发布另一个包含代码的问题,您的结果包括询问如何优化它。
猜你喜欢
  • 2016-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-05
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
相关资源
最近更新 更多