我正在通过Xcode使用Leaks Instruments功能来(尝试和)查找内存泄漏。我还没弄明白如何使用这个程序。我在程序中单击Leaks并看到内存增加,因为我在模拟器中做了各种各样的事情。我显示了扩展详细信息窗格。 “扩展详细信息”窗格中引用我的应用程序的唯一内容是main。与Xcode生成的主要方法一样。其他一切都是UIKit,Foundations和其他我没写过的SDK类。我的错误是我的应用程序没有显示任何内容?
在我达到3分钟之前,有超过100个泄漏总计2.5k。这是常见的吗?
答案 0 :(得分:29)
我写了一篇关于使用Instruments跟踪iPhone内存泄漏的教程。我不确定它是否会帮助你处理你所处理的事情......但是不会受到伤害。 : - )
http://www.streamingcolour.com/blog/tutorials/tracking-iphone-memory-leaks/
答案 1 :(得分:5)
在仪器面板上将视图更改为“扩展细节”。这将在您停止记录并选择泄漏的对象后显示每个泄漏对象的堆栈跟踪。
您确实看到了对API的调用,但您感兴趣的是在API调用之前找到应用程序的最后一个方法,即泄漏的位置。
提示:在泄漏视图中打开“收集内存内容”。查看对象值还应有助于找到问题所在。
您不希望任何泄漏。 100个泄漏是不典型的(至少在我的应用程序中;)典型应为0。
答案 2 :(得分:3)
我不熟悉如何使用泄漏,但您可以随时尝试在代码上运行Clang分析器,看看是否会改变:http://clang.llvm.org/StaticAnalysis.html。它经常会发现许多可能导致内存泄漏的错误。
答案 3 :(得分:3)
Xcode:run - >从Performance Tool开始 - >泄漏
答案 4 :(得分:2)
请记住,当设备不能时,模拟器可能会泄漏。已经使用UITableViewController类进入了那个。
答案 5 :(得分:2)
使用LLVM / Clang静态分析器。
答案 6 :(得分:1)
另请注意,泄漏工具不会向您显示对象被过度保留并仍然保留的实例。泄漏的情况是应该放弃的物体只是闲逛而没有人来清理它们。即使您认为它们应该消失,保留的对象也会被有效地保留 - 因此泄漏工具无法指出它们,因为它们仍然被引用,并且没有办法将它们与仍应保留的对象分开。 / p>
要查找这些内容,请使用内存报告工具,并确保释放对象后内存使用率完全降低。如果你注意到某些东西没有释放内存,你可以先在dealloc中放置断点,看看你希望看到的内容是否真正被释放。
您需要查找这两种情况以保持清洁的内存占用。
答案 7 :(得分:1)
Run -> Start with Performance Tool -> Leaks
答案 8 :(得分:0)
要检测内存泄漏,您可以使用Xcode的“构建和分析”功能。
只需选择构建 - >在Xcode菜单中构建和分析。
答案 9 :(得分:0)
答案 10 :(得分:0)
泄漏可在Xcode中找到的应用程序:run -> Start with Performance Tool -> Leaks
。
Apple的Instruments实用程序,可以在/Developer/Applications/Performance Tools
。
答案 11 :(得分:0)
查找内存泄漏的最佳方法之一是Select Product->分析。在左侧Xcode显示您在哪个文件中有内存泄漏。什么是导致内存泄漏的变量。这是查找内存泄漏的最佳方法之一。
答案 12 :(得分:0)
内存调试器(位于控制台上方,视图调试器旁边的按钮)也非常有用。 它会向您显示泄漏,并且您可以轻松地检查/过滤对象是否仍在内存中(如果不应该)。