【问题标题】:How do you catch memory leaks in your iOS projects?你如何在你的 iOS 项目中发现内存泄漏?
【发布时间】:2012-01-04 13:42:45
【问题描述】:

内存泄漏是 iOS 项目中常见的问题。 Xcode 泄漏工具和静态分析器无法找到所有这些。您如何找到泄漏点?

【问题讨论】:

  • 很遗憾,这不是您宣传您的代码的地方 - 即使您的意图是好的。
  • 这篇文章如果你把它框成一个问题会更好,然后post an answer yourself
  • 大功告成。 7 小时后,我可以发布我的答案。
  • @Alexey 感谢您使用该系统。 :)
  • 这个问题已经被问过很多次了。你应该在那里找到一个现有的问题和答案。

标签: ios memory-leaks


【解决方案1】:

我开发了lib,它可以捕获泄漏的对象并将它们之间的关系可视化。

所有交互都通过 Xcode 控制台进行。在 Xcode 调试器中按暂停并输入类似的内容:

po [parser run:@"leaks saveGraph /Users/yourName/Documents/dot/mem.txt"]

该命令为点工具 (http://www.graphviz.org/) 生成 mem.txt 文件。必须安装一个点。然后我们可以通过;将mem.txt转换为点文件;

dot -Tdot mem.txt -o mem.dot && open ./mem.dot 

这将显示当前应用程序中的活对象和死对象的图表。一些例子:

https://github.com/soniccat/memCheck-for-iOS/raw/master/images/pic1.png
https://github.com/soniccat/memCheck-for-iOS/raw/master/images/pic2.png

从 DetailViewController 到 UILabel 的箭头表示 DetailViewController 的对象包含 UILabel 的对象。虚线箭头显示对象何时死亡。活体有白色背景,死体有灰色背景。

关于解析器命令格式和特殊过滤器 (fromList),它会删除您可以在 memCheck-for-iOS git hub page 上阅读的所有不必要的对象。

使用愉快:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多