【问题标题】:Strange iPad Memory Issues奇怪的 iPad 内存问题
【发布时间】:2010-12-22 22:01:16
【问题描述】:

在任何给定时刻运行 The Allocations Instrument 时,我的 iPad 应用分配的内存不足 5MB。我已经非常彻底,并确保所有内容都正确发布。我的应用程序是一个标签栏应用程序,它可以加载大量图像、视频和 PDF。我已确保妥善处理此问题并清空缓存等以释放内存。

但是,当我运行 Activity Monitor Instrument 时,我的应用程序在我的 iPad 上运行,我的应用程序的内存使用量逐渐增加,最终达到 100MB 以上并崩溃。

我不太确定该怎么做,也没有导致问题的特定代码块。整个应用程序是一个内存猪,我以前从未遇到过这个问题。

除了分配之外,我的应用程序会消耗这么多内存的原因是什么?是否有其他工具可以用来跟踪哪些进程正在耗尽内存?

编辑:正如有人提到的,我使用 Build and Analyze 来确保所有问题都已清理完毕。

【问题讨论】:

  • 您是否尝试过对您的项目进行“构建和分析”?另外...仪器应该会告诉您泄漏的位置。
  • 是的,一切都清楚了。
  • 那么活动监视器显示iPhone模拟器内存​​使用量逐渐增加?它可能不是你的应用,只是你的应用在模拟器中运行的副作用。尝试在设备上运行该应用,看看您是否开始在那里收到内存警告。
  • 不,我在 Activity Monitor Instrument 上运行,而我的应用在设备上运行。
  • 你不会碰巧启用了 NSZombies 吧?

标签: iphone objective-c ipad memory memory-management


【解决方案1】:

很多时候 CGImage 和其他大型媒体 blob 不会出现在分配上 - 它们可能会显示为一些看起来很无辜的小对象,但它们指向一些大型对象,例如使用“奇怪”技术分配的图像(如内存映射文件、视频卡内存等)。 另一方面,活动监视器工具会查看为您的应用加载的 4k 页面所使用的内存,因此包括这些媒体 blob。

我不知道你的缓存方案是什么。这是一个场景: 您需要加载 50 100k jpegs - 用户一次最多只能看到 3 个。 50 100k 图像是 5MB 内存。因此,您可以从 Internet 加载 jpeg 的所有数据。如果您随后从该数据创建 50 个 CGImage,那么每个将消耗(假设 jpeg 为 1000x1000 * 4bytes per pix = )4MB 内存。因此,将它们全部放在内存中将是 200MB。这是行不通的。因此,您需要保留 100k 压缩的 nsdata blob,然后一次只创建 1 或 3 个 CG 图像。这是一门让事情保持平稳和平衡的艺术。

在其他工作中:在分配中 - 查看您在任何时候拥有的 CGImageRefs 等的数量,并降低 那个 数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多