Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检测iPhone上的内存泄漏?_Iphone_Xcode_Memory Leaks - Fatal编程技术网

如何检测iPhone上的内存泄漏?

如何检测iPhone上的内存泄漏?,iphone,xcode,memory-leaks,Iphone,Xcode,Memory Leaks,我正在通过Xcode使用Leaks Instruments功能来(尝试)查找内存泄漏。我还没有弄明白如何使用这个程序。我点击程序中的“泄漏”,看到在模拟器中做各种事情时内存在增加。我已显示扩展详细信息窗格。“扩展详细信息”窗格中唯一引用我的应用程序的是main。与Xcode生成的主要方法相同。其他的都是UIKit、Foundation和我没有编写的其他SDK类。我做错了什么,我的应用程序没有显示任何内容 在我到达3分钟之前,共有100多处泄漏,共计2.5公里。这很常见吗?我不熟悉如何使用泄漏,但

我正在通过Xcode使用Leaks Instruments功能来(尝试)查找内存泄漏。我还没有弄明白如何使用这个程序。我点击程序中的“泄漏”,看到在模拟器中做各种事情时内存在增加。我已显示扩展详细信息窗格。“扩展详细信息”窗格中唯一引用我的应用程序的是main。与Xcode生成的主要方法相同。其他的都是UIKit、Foundation和我没有编写的其他SDK类。我做错了什么,我的应用程序没有显示任何内容


在我到达3分钟之前,共有100多处泄漏,共计2.5公里。这很常见吗?

我不熟悉如何使用泄漏,但您可以尝试在代码上运行Clang analyzer,看看是否会出现任何问题:。它经常会发现许多可能导致内存泄漏的错误。

将仪表板上的视图更改为“扩展细节”。这将在停止录制并选择泄漏对象后显示每个泄漏对象的堆栈跟踪

您确实看到了对API的调用,但您感兴趣的是在API调用之前找到应用程序的最后一个方法,这就是漏洞所在

提示:在leaks视图中启用“收集内存内容”。查看对象值也有助于找到问题所在


你不想有任何泄漏。100泄漏不是典型的(至少在我的应用程序中是如此),典型的应该是0。

还要注意的是,泄漏工具不会向您显示对象被过度保留并且仍然保留的实例。泄漏是指本应被释放的物体只是在无人清理的情况下四处游荡。过度保留的对象被有效地保留,即使您认为它们应该消失——因此泄漏工具无法指出它们,因为它们仍然被引用,并且无法将它们与仍然应该保留的对象区分开来

要找到这些,请使用内存报告工具,并确保释放对象后内存使用量完全下降。如果您注意到某些东西没有释放内存,您可以从在dealloc中放置断点开始,以查看您希望看到的内容是否实际被释放


你需要寻找这两种情况来保持干净的内存占用。

我写了一篇关于使用仪器跟踪iPhone内存泄漏的教程。我不确定它是否能帮助你处理你正在处理的事情……不过,这没什么害处。:-)


请记住,当设备不泄漏时,模拟器可能会泄漏。曾经在UITableViewController类中遇到过这种情况。

使用LLVM/Clang静态分析器

Xcode:run->Start with Performance Tool->Leaks

要检测内存泄漏,您可以使用Xcode的“构建和分析”功能


只需在Xcode菜单中选择Build->Build and analysis

总结了主内存泄漏工具:

可以在Xcode中找到的泄漏应用程序:
run->Start with Performance Tool->Leaks


苹果的Instruments实用程序可以在
/Developer/Applications/Performance Tools

找到内存泄漏的最佳方法之一是选择产品->分析。在左边,Xcode显示了哪个文件存在内存泄漏。导致内存泄漏的变量是什么。这是查找内存泄漏的最佳方法之一。

内存调试器(位于控制台上方,视图调试器旁边的按钮)也非常有用。
它将向您显示泄漏,并且您可以轻松地检查/过滤对象是否仍在内存中,而它们不应该在内存中

@本,谢谢。我试试看@lajos请看我说的“我已显示扩展详细信息窗格”部分。您是在查看实际的“泄漏”数据还是在查看对象分配数据?如果你看的是后者,那么是的,这是正常的。。。这些不是漏洞,只是分配。它让你了解你的内存占用情况。我正在查看漏洞。我在那里唯一的东西就是梅因。随着我使用该应用程序,泄漏和字节数继续增加。我不明白main怎么会泄漏这么多。确保所有alloc都已释放。如果不是的话,你是在制造内存泄漏。这一点很重要!为了找到这些,我有时会向dealloc添加NSLog调用以打印retain count。我下载了该工具,但在其文档中发现它似乎与XCode中已经包含的相同(使用“command-shift-a”执行)。真的?真的。一年半前,当我发布这篇文章时,它没有包含在Xcode中。很好的教程。请记住,如果您只是使用Xcode加载仪器,那么您可以跳过很多步骤,方法是继续提供帮助并键入“Leaks”。它将向您显示将加载所有设置的菜单选项。此链接不再工作,请更新。
Run -> Start with Performance Tool -> Leaks