10

我即将完成我的第一个 iPhone 应用程序,我想知道是否有一组步骤用于检查应用程序的内存泄漏、性能等?

使用泄漏仪器检查是否足够?

是否需要运行任何一系列测试?你们有什么教程/文件可以指点我吗?

4

6 回答 6

4

与“泄漏”一起运行很重要。我不知道最终测试的教程/清单,尽管这样的东西会很方便。我要补充几点:

1) 确保使用实际硬件进行测试,而不仅仅是模拟器,以确保在您打算支持的所有硬件上性能合理。以我的经验,模拟器无法让您准确了解设备的性能,并且新旧硬件之间可能存在显着差异(极端示例是 iPhone 4 与 Gen1 iPhone)。例如,在我的一个应用程序中,我生成了一份 1 页的 PDF 报告。在 iPhone 4 甚至 iPad 上,大约需要 1 秒。在第一代 iPhone 上,相同的代码需要将近 8 秒。我无法加快速度,但很明显我需要添加一个进度指示器,让用户知道应用程序没有被冻结。这是我不会注意到仅使用模拟器和/或最新硬件运行的东西。

2) 你可能想花一点时间运行 NSZombieEnabled。即使当前没有明显的问题迹象,这也可以发现可能潜伏在幕后的内存问题。更多信息:

http://www.cocoadev.com/index.pl?NSZombieEnabled

于 2010-12-09T13:20:41.190 回答
3

使用 Leaks 工具进行测试应该是您策略的一部分,但不是全部。您将需要从多个角度测试您的应用程序。

我的测试策略倾向于首先关注功能测试,然后是性能测试,然后是最后一轮功能测试。如果代码中某处存在崩溃错误,则调整性能几乎没有意义,除非该崩溃是由于某种资源耗尽所致。

锤击应用程序,尝试通过在您能想到的每种情况下运行每个选项来使其中断。如果通过了,我通常会使用我的“疯狂的猴子破解”测试,我会尽可能快地在屏幕上随机敲击按钮和区域,看看我是否暴露了更多的破坏者。

只有这样我才会求助于 Instruments。使用 Time Profiler 和 Memory Monitor 仪器在设备上运行应用程序(不应在模拟器中进行性能调整)。寻找性能热点和内存峰值,以及内存积累。在执行此操作时,重复之前用于功能问题的相同类型的测试。

一旦你处理了热点和明显的堆积,你就可以对内存进行更细粒度的检查。实际上,我更喜欢使用具有新的 heapshot 分析功能的 Object Allocations 工具,而不是使用 Leaks 工具来查找细微的内存累积和泄漏。泄漏工具往往是保守的,并且可能会错过一些积累。Nathaniel 指出了 Bill Bumgarner 在这个主题上的出色文章

对象分配工具及其堆与 UI 自动化工具结合使用时特别强大,您可以在应用程序的某些部分中执行数百或数千个循环测试,以使即使是最小的内存积累也能脱颖而出。我现在开始做更多的这种测试。

我认为最好在实际中看到这一点,而不是在文本中描述,所以我建议观看我的“测试”和“性能调整”课程的视频,作为我在 iTunes U 上的高级 iOS 课程的一部分。我演示了这些工具中的每一个,以及在提交 App Store 之前如何在我自己的应用程序测试中使用它们。我的课程笔记VoodooPad格式)也详细描述了这一点。

于 2010-12-10T23:37:11.807 回答
2

Leaks 仪器可以捕获许多可能的泄漏,但不是全部。观察你的总内存分配并确保它在它应该的时候下降。阅读 bbum 的 heapshot 分析案例研究:

http://www.friday.com/bbum/2010/10/17/when-is-a-leak-not-a-leak-using-heapshot-analysis-to-find-undesirable-memory-growth/

并通过 Build and Analyze 命令运行 C​​lang 静态分析器,如果您还没有从一开始就这样做的话。

于 2010-12-10T23:04:30.963 回答
1

您应该为您的应用程序模拟低内存以查看它的反应,被iOS杀死并不是那么有趣,因为您消耗了太多内存。如果你只在模拟器上开发,很容易错过,因为它在内存方面似乎相当宽容。

于 2010-12-09T13:29:19.193 回答
0

只要确保在需要减少内存泄漏时释放对象

检查此链接以了解有关仪器的信息。

http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/Introduction/Introduction.html

于 2010-12-09T12:17:57.613 回答
0

首先构建您的应用程序,但不要这样做,现在单击 XCode 顶部菜单栏上的“运行”,然后单击“使用性能工具运行”并选择“泄漏”。您将看到新窗口,您可以在其中看到您的应用程序使用的 Live Bytes 以及内存泄漏的位置。内存泄漏将用红色标记显示。如果在执行此操作时发现任何问题,请随时提出。

于 2010-12-09T12:23:28.720 回答