Iphone 仪器:检查内存泄漏查询

Iphone 仪器:检查内存泄漏查询,iphone,cocoa,cocoa-touch,memory-leaks,Iphone,Cocoa,Cocoa Touch,Memory Leaks,我很好奇,当一个人继续执行他们的代码,用仪器进行泄漏检查时——手动点击应用程序的所有部分以确保内存泄漏发生在相应的区域是明智的吗?例如,我相信我的应用程序中有一些内存泄漏,在UINavigationController树的深处。我是否继续运行应用程序检查漏洞,同时手动深入iPhone以访问应用程序的该部分?仪器是否足够聪明,可以自己找到它?正确的做法是什么 谢谢你的洞察力 不,Instruments只监视代码的内存分配,它不会去任何地方,除非你的应用程序去了那里。实际上,泄漏只不过是一段内存,不

我很好奇,当一个人继续执行他们的代码,用仪器进行泄漏检查时——手动点击应用程序的所有部分以确保内存泄漏发生在相应的区域是明智的吗?例如,我相信我的应用程序中有一些内存泄漏,在UINavigationController树的深处。我是否继续运行应用程序检查漏洞,同时手动深入iPhone以访问应用程序的该部分?仪器是否足够聪明,可以自己找到它?正确的做法是什么


谢谢你的洞察力

不,Instruments只监视代码的内存分配,它不会去任何地方,除非你的应用程序去了那里。实际上,泄漏只不过是一段内存,不再存在引用;因此它不能再被释放了,因为如果你不能再引用它,你将来怎么能释放它呢


不过,仪器不会以这种方式发现所有内存泄漏。如果您保留对内存的引用,只是永远不要使用它们来释放内存,仪器不会将其视为泄漏,因为它无法预测您将来是否会释放内存。因为你仍然可以释放它,所以它不被认为是泄漏。因此,如果您有内存问题,不仅可以查找泄漏,还可以监视应用程序在一段时间内收集了多少内存。如果该值永久性地升高,即使它不应该升高,您也可能仍然存在泄漏,只是在内存引用丢失的地方没有泄漏。

不,仪器只是监视代码的内存分配,它不会去任何地方,除非您的应用程序去了那里。实际上,泄漏只不过是一段内存,不再存在引用;因此它不能再被释放了,因为如果你不能再引用它,你将来怎么能释放它呢


不过,仪器不会以这种方式发现所有内存泄漏。如果您保留对内存的引用,只是永远不要使用它们来释放内存,仪器不会将其视为泄漏,因为它无法预测您将来是否会释放内存。因为你仍然可以释放它,所以它不被认为是泄漏。因此,如果您有内存问题,不仅可以查找泄漏,还可以监视应用程序在一段时间内收集了多少内存。如果该值永久上升,即使它不应该上升,也可能仍然存在泄漏,只是在内存引用丢失的地方没有泄漏。

通常,我会关注涉嫌导致泄漏的模块,然后扩大泄漏范围。虽然我没有在Mac上使用工具,但我使用Purify和本机Windows堆工具在Windows程序中进行内存泄漏跟踪


在您确定了主要泄漏源之后,使用不同的测试输入运行程序,并通常检查程序是否存在其他泄漏,这绝不是一个坏主意。即使是一组特定数据的小泄漏也会导致更大的泄漏。

通常,我会关注涉嫌导致泄漏的模块,然后扩大范围。虽然我没有在Mac上使用工具,但我使用Purify和本机Windows堆工具在Windows程序中进行内存泄漏跟踪

在您确定了主要泄漏源之后,使用不同的测试输入运行程序,并通常检查程序是否存在其他泄漏,这绝不是一个坏主意。即使是一组特定数据的小泄漏也可能导致更大的泄漏