我即将完成我的第一个iPhone应用程序,我想知道是否有一组步骤用于检查应用程序的内存泄漏,性能等?
用Leaks仪器检查是否足够?
是否需要运行一系列测试?是否有任何教程/文件,你们可以指点我?
答案 0 :(得分:4)
以“泄漏”运行非常重要。我不知道最终测试的教程/清单,尽管这样的东西会很方便。我要补充几件事:
1)确保使用实际硬件而不仅仅是模拟器进行测试,以确保在您打算支持的所有硬件上性能合理。根据我的经验,模拟器无法准确了解设备的性能,旧硬件和新硬件之间可能存在显着差异(极端的例子是iPhone 4与Gen1 iPhone)。例如,在我的一个应用程序中,我生成一页1页的PDF报告。在iPhone 4甚至iPad上,大约需要1秒钟。在Gen1 iPhone上,相同的代码需要接近8秒。我没办法加快速度,但很明显我需要添加一个进度指示器让用户知道应用程序没有被冻结。这是我不会注意到只运行模拟器和/或最新硬件的东西。
2)你可能想花一点时间运行NSZombieEnabled。这可以找到可能潜伏在幕后的内存问题,即使目前没有明显的麻烦迹象。更多信息:
答案 1 :(得分:3)
使用Leaks仪器进行测试应该是您策略的一部分,但不是全部。您将需要从多个角度测试您的应用程序。
我的测试策略往往首先关注功能测试,然后是性能测试,然后是最后一轮功能测试。如果你的代码中有某个崩溃错误,那么调优性能就没什么意义了,除非那次崩溃是由于某种资源耗尽造成的。
在应用程序上锤击,尝试通过在您能想到的每种情况下运行每个选项来使其中断。如果这个过去了,我通常会使用我的“疯狂猴子破解”测试,我会尽可能快地敲击屏幕上的随机按钮和区域,看看是否有任何进一步的暴露。
我才转向乐器。使用Time Profiler和Memory Monitor仪器在设备上运行应用程序(不应在模拟器中进行性能调整)。查找性能热点和内存峰值以及内存累积。在执行此操作时,请重复您之前用于解决功能问题的相同类型的测试。
一旦你处理了热点和明显的积累,你就可以进行更精细的记忆检查。我实际上更喜欢使用Object Allocations仪器及其Leaks仪器的新快照分析功能来查找细微的内存累积和泄漏。泄漏仪器往往是保守的,可能会错过一些积累。纳撒尼尔指出Bill Bumgarner在这个问题上的出色post。
与UI自动化仪器结合使用时,对象分配工具及其快照特别强大,您可以在应用程序的各个部分中进行数百或数千次测试,以使最小的内存累积脱颖而出。我现在开始做更多这种测试了。
我认为最好是在行动中看到这一点,而不是在文字中描述,所以我建议观看我的“测试”和“性能调整”课程的视频作为advanced iOS course on iTunes U的一部分。我在App Store提交之前演示了这些工具以及如何在我自己的应用程序测试中使用它们。我的course notes(VoodooPad格式)也详细描述了这一点。
答案 2 :(得分:2)
Leaks仪器可以捕获许多可能的泄漏,但不是全部。观察你的总内存分配,并确保它在应该的时候下降。阅读bbum的快照分析案例研究:
如果您还没有从getgo中执行此操作,请通过Build and Analyze命令运行Clang静态分析器。
答案 3 :(得分:1)
你应该模拟你的应用程序的低内存,看看它是如何反应的,因为你消耗了太多的内存而被iOS杀死并不是那么有趣。如果你只是在模拟器上开发它很容易被遗漏,因为它在内存方面似乎非常宽容。
答案 4 :(得分:0)
只要确保在需要减少内存泄漏时释放对象
检查此链接以了解仪器。
答案 5 :(得分:0)
首先构建您的应用程序,但不要,现在单击XCode顶部菜单栏上的“运行”,然后单击“使用性能工具运行”并选择“泄漏”。 您将看到新窗口,您可以在其中查看应用程序使用的实时字节数以及内存泄漏的位置。内存泄漏将以红色标记显示。 如果在这样做时发现任何问题,请随时询问。