【问题标题】:iOS Development: What are some ways I can troubleshoot a lag issue in my game that occurs 15 - 30 minutes after playing it?iOS 开发:有哪些方法可以解决我的游戏在玩游戏 15 到 30 分钟后出现的延迟问题?
【发布时间】:2010-12-02 18:21:32
【问题描述】:

我正在构建一个 iOS 益智游戏以熟悉该平台,我的一些测试人员注意到一个严重的延迟问题,在玩游戏后大约 15 到 30 分钟间歇性地发生,并且延迟似乎与此无关与游戏的任何特定部分。我已经使用 Leaks 工具测试了该应用程序,但尚未发现任何泄漏。

  1. 哪些因素会导致游戏在玩了一段时间后立即开始滞后?
  2. 我可以使用哪些方法/工具来解决延迟问题?

非常感谢您的智慧!

更新:作为一名新的 iOS 开发人员,我的印象是 Leaks 工具至少会报告我的大部分内存泄漏,所以我很放心地相信当没有报告泄漏时,我的应用程序正在正确管理内存。不是这样!遵循此处发布的一些建议后,我观看了一些有关如何使用分配工具的视频,发现我的应用程序随着时间的推移正在失去大量内存,并且在花了大约两个小时浏览我的所有代码并修复内存之后相关代码,我的游戏不再滞后或报告任何丢失的内存或内存泄漏。谢谢大家!

【问题讨论】:

  • @joe blow:哈哈!像一个典型的程序员一样说话!您的评论提供了零有用的信息。
  • Joe Blow,我是 iOS 平台的新手,但在观看了快速教程视频并重新访问内存管理指南后,我发现解决此问题相当简单明了。我认为如果你只遵循一些简单的规则,你的评论会比实际情况更加痛苦和困难。

标签: iphone ipad ios


【解决方案1】:

主要的可能是内存警告,这反过来会导致一堆游戏资源可能一次全部释放......

不是泄漏,而是 ObjectAlloc 工具。泄漏仅显示您的应用程序已经知道的内存使用情况。 ObjectAlloc 向您显示使用的总内存,真正的问题是看到使用的内存图表随着时间的推移而攀升。

最后,我会在使用 TimeProfiler 工具时尝试让游戏进入该状态,这样您就可以看到当游戏变慢时哪些操作会突然占用大量时间。您必须在设备上执行此操作,它不会告诉您使用模拟器的实际情况。

【讨论】:

  • 正如 MCannon 所指出的,ObjectAlloc 中的新 heapshot 功能对于跟踪内存积累非常宝贵。 Bill Bumgarner 在这里写了一篇很棒的文章:friday.com/bbum/2010/10/17/…
【解决方案2】:

检查您是否收到内存警告。另外,尝试在仪器中使用堆射击工具,因为某些东西可能会保留引用,并阻止对象释放,这不会显示为标准泄漏。 我肯定会看看对象分配工具,并密切关注仍然存在的对象。

如果你没有经常使用仪器,我认为苹果在开发网站上有一些视频可以通过它们。

【讨论】:

    【解决方案3】:

    您是在模拟器上还是在实际手机上使用泄漏?我发现模拟器在运行泄漏时的结果与手机不同。根据您的描述,您似乎发生了一些泄漏。

    【讨论】:

    • 我已经在设备上使用过它,但我在模拟器上使用得更多。我将开始在设备上进行更多测试,谢谢!
    【解决方案4】:

    当电池电量不足时,我收到了一些类似的反馈。因此,您可以检查设备通电时是否会重现问题。

    另外,您在游戏中使用 openGL 吗?我之所以问,是因为我观察到第一次出现的纹理绘制存在一些滞后,尽管这些纹理之前已预加载和缓存。

    最后一个问题,您的测试人员正在使用哪些设备?

    【讨论】:

    • 谢谢,橙子。没有 OpenGL,只有 UIKit。测试设备均为 iPhone 4s。我会检查行为是否会根据是否插入而发生变化。
    【解决方案5】:

    LEAKS 与过多的内存分配不同。

    听起来你只是不发布不再需要的东西,而且你正在最大限度地利用内存和分块。

    检查您的分配,并密切关注不应该扩大的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多