【问题标题】:Memory footprint of an app on iPhoneiPhone 上应用程序的内存占用
【发布时间】:2011-01-03 05:17:41
【问题描述】:

我最近有一个应用因为内存不足异常而被应用商店拒绝。该应用程序不会泄漏内存,但它的基本内存占用似乎太高了。根据苹果发送的崩溃日志,它在内存中占用了大约 14000 页(主要是由于巨大的纹理)。不过有两件奇怪的事情:

  1. 我在提交之前在 5 台设备上进行了严格测试,从未在任何一台设备上发生过这种崩溃。
  2. 我确实在拒绝后优化了纹理,使它们大约是原始大小的一半(纹理内存消耗)。

我无法知道我的应用程序现在占用了多少页面,除非我可以重现与苹果相同的崩溃(我永远无法重现)。 是否有其他方法可以找出我的应用程序的内存占用,以便我可以确定它现在已经足够优化。

我确实尝试过工具,但是当我尝试通过我的 XCode 运行它时,我的应用程序崩溃了(我的 XCode 一定有问题)。但是当我直接在我的 iPhone/iPod 上运行它时,它可以完美运行。 任何帮助找出我的应用程序在 iPhone 上的内存占用(如果有类似于 Windows 的任务管理器的东西),将不胜感激。

谢谢

编辑:

  1. 从 XCode 启动应用程序会在控制台中出现以下错误: “启动远程程序时出错:无法获取进程 553 的任务。”

  2. 使用活动监视器启动应用程序会出现以下错误: “目标过早终止,无法收集数据”

EDIT2:

通过使用开发配置文件而不是分发配置文件,我能够使用 Activity Monitor 运行我的应用程序。但是现在活动监视器中有几个部分 - 使用的物理内存、实际内存、虚拟内存。我考虑其中哪一个。 总结一下,我需要知道其中哪一个导致 iPhone 抛出内存不足的异常。

【问题讨论】:

  • “我的 XCode 一定有问题” - 可能是您的应用程序。有错吗?
  • 应用程序在 iphone 上独立运行,但从 XCode 启动时不运行。不知道怎么可能是应用的问题。

标签: iphone xcode performance instruments


【解决方案1】:

XCode -> 运行 -> 使用性能工具运行 -> 活动监视器。

如果设备已连接,Activity Monitor 将在 iPhone/iTouch 上运行。

【讨论】:

  • “我确实尝试过仪器,但是当我尝试通过我的 XCode 运行它时,我的应用程序崩溃了(我的 XCode 一定有问题)。” - 活动监视器是一种工具。
  • 执行此操作时,您并未通过 Xcode 运行应用程序。手动启动应用程序,然后调出 Instruments 并连接到您的设备。我的建议是使用内存监视器应用程序,因为它可以准确地细分应用程序的内存使用情况以及系统总内存使用情况。
【解决方案2】:

我认为你是从错误的角度来看待这个问题的。您在问如何在不使用 XCode 的情况下找到内存占用。我认为您应该问的问题是:为什么不能使用 XCode?大概这就是您最初用于开发应用程序的方式?

如果没有 XCode,您几乎是盲目的。你说你将纹理的大小减半,但你怎么知道?当您的应用程序收到低内存警告时,它是否会释放任何多余的内存? (applicationDidReceiveMemoryWarning:)

首先,您是否查看过从 XCode 运行应用程序时的崩溃日志?您应该能够在 XCode 的 Organizer 中看到它们。

我不确定是否有单一的解决方案可以阻止您的应用因 XCode 崩溃。通常,当我的 iPhone 不允许调试时,我只需重新启动 xCode 和我的手机,它就会重新开始工作。重新启动 XCode 有时会有所帮助。我也会尝试重新安装 XCode 和 iPhone SDK。

【讨论】:

  • 事实证明你是对的。我试图使用 XCode 运行我的应用程序的可分发版本。理想情况下应该没问题,但是在运行 dist 版本时,XCode 似乎存在一些隐藏问题。所以我改为调试并从项目中删除了代码签名权利。这使我能够使用 Instruments 运行性能监控工具。我还尝试重新安装 iPhone SDK 和 XCode,但这并没有什么不同。
猜你喜欢
  • 1970-01-01
  • 2014-05-30
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多