苹果的Xcode开发环境是否提供任何内存泄漏检测工具?
我对适用于iPhone SDK的工具特别感兴趣。目前这是我在业余编程项目中最喜欢的平台。
所述工具的文档/教程将非常有帮助。
苹果的Xcode开发环境是否提供任何内存泄漏检测工具?
我对适用于iPhone SDK的工具特别感兴趣。目前这是我在业余编程项目中最喜欢的平台。
所述工具的文档/教程将非常有帮助。
有一个专门被称为Leaks
的工具,就像之前的一位发帖者所说,最简单的运行方式是直接从Xcode中执行:
运行 -> 使用性能工具开始 -> Leaks
它似乎非常擅长检测内存泄漏,并且对于像我这样的非C语言头脑来说也很容易理解。
在Xcode 6中,从Product
菜单中选择Profile
以启动苹果的Instruments工具。(该应用程序位于Xcode应用程序包内容内:/Applications/Xcode.app/Contents/Applications/
)
商业替代品是OmniObjectMeter。(已被The Omni Group停止支持)
Clang静态分析器
非常适用于查找C、C++和Objective-C代码中的漏洞:
您可以在Xcode中通过菜单 -> 运行 -> 启动性能工具 -> ...
来运行工具。
是的。苹果称其为"Instruments"(不仅仅是内存工具)。
请参阅苹果的介绍Instruments用户指南
。特别是,请参阅定位应用程序中的内存问题
。它提供了如何使用面向内存的跟踪模板的示例。
步骤1. 选择分配工具
步骤 3. 按记录键运行工具
一旦您按下左上角的记录按钮,您的应用程序将在设备上启动,并且工具将开始绘制您的分配情况。在这里,您只需要运行应用程序,关注可能存在问题的区域,以查看是否有更多的内存分配而不是释放。这可能意味着要做很多重复的任务,但稍后您会感谢自己。
您应该会看到类似于这样的内容:
我建议您先运行应用程序,并达到内存稳定点,以便获得一个良好的基准线,这将使任何增加都更加明显。当您满意于测试数据时,请按左上角的停止按钮。要设置检查范围,请使用键盘快捷键Command <表示左侧检查范围,Command >表示右侧检查范围。在我们的应用程序中,我们有一个大约为20MB的基线。
有不同的方法来分析这些数据,我这里不会涉及到所有的方法,但请注意,有一个下拉菜单可以选择多种方式来查看和分析您的数据。
步骤5. 标记代数
如果您不想过多处理检查范围,可以使用标记代数功能。该功能在仪器右侧面板上有一个按钮。
这个按钮将会在仪器时间轴上标记点,基于检查线所在的位置。它这样做是为了跟踪自上一个标记以来或者从一开始就没有其他标记时的所有分配情况。您可以在运行分配仪器时或停止运行后标记生成,就像这个例子中一样:
步骤6. 查看堆栈跟踪
最后要介绍的是查看堆栈跟踪。为此,您需要将检查范围设置为突出显示所有分配,然后查看统计视图,确保在右侧面板上选择了已创建和持久气泡。在统计视图中,确保按照持久字节从高到低排序。这里有很多分配,很难理解发生了什么,因为其中许多是系统分配。
深入了解
这个视图有很多有用的功能,其中之一是右侧的大部分黄色标签,显示每个方法调用占用的内存量。每个应用程序都不同,因此您作为开发人员必须决定突出显示的方法是否是问题,您可以优化的内容,还是您应用程序中不可避免的一部分。
在我的情况下,UIColor变量是一种持久存在并且在我们的整个应用程序中使用的东西,因此在我们应用程序的生命周期内是可接受的。
ObjectAlloc和MallocDebug都可以帮助您。如果您安装了整个SDK,它们将在Developer->Applications->Performance Tools中找到。
它们的名称已经很好地提示了其功能,OA跟踪创建的对象,MA是一个通用的内存泄漏工具。
我还没有尝试过在iPhone开发中使用它们,但我相信它们也可以在那里使用。
假设您已经注册了ADC iPhone开发人员网站,在这里是要遵循的链接:Instruments用户指南
当使用 rustyshelf 的解决方案
时,请确保在 iPhone 上进行测试,而不是模拟器。内存使用情况差异巨大。