Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.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 即使I';我肯定他们存在_Iphone_Xcode_Memory Leaks_Instruments - Fatal编程技术网

Iphone 即使I';我肯定他们存在

Iphone 即使I';我肯定他们存在,iphone,xcode,memory-leaks,instruments,Iphone,Xcode,Memory Leaks,Instruments,我正在检查仪器是否有泄漏,我已经设置为每秒钟检查一次,但没有泄漏出现 我肯定我的应用程序中一定有一些,有什么可以阻止这些出现的吗?有没有一种好方法可以制造泄漏,这样我就可以测试仪器中是否出现泄漏 谢谢 造成泄漏很容易: id someObject = [[NSObject alloc] init]; someObject = nil; 在你的应用程序中输入一些类似的代码,你肯定会在仪器中看到泄漏。只有在分配了对象但不再引用时,你才能使用工具找到泄漏。另一种类型的“泄漏”是指你不想提及的东西。这

我正在检查仪器是否有泄漏,我已经设置为每秒钟检查一次,但没有泄漏出现

我肯定我的应用程序中一定有一些,有什么可以阻止这些出现的吗?有没有一种好方法可以制造泄漏,这样我就可以测试仪器中是否出现泄漏


谢谢

造成泄漏很容易:

id someObject = [[NSObject alloc] init];
someObject = nil;

在你的应用程序中输入一些类似的代码,你肯定会在仪器中看到泄漏。

只有在分配了对象但不再引用时,你才能使用工具找到泄漏。另一种类型的“泄漏”是指你不想提及的东西。这通常发生在散列表或字典之类的集合中,其中键/值对保留在程序员已经忘记的集合中。

我很确定,正如clemahieu假设的那样,您真正看到的是过度保留的对象—您认为您已经释放了它们,但它们仍然被保留

一个快速的健全性检查是在dealloc中设置断点,并查看您希望释放的类是否真的存在


您还可以使用内存跟踪工具(而不是泄漏)查看内存仍然存在-只需确保选择“已创建且仍在使用”选项以查看哪些对象仍然存在。

“…我确定我的应用程序中一定有一些…”-您有什么证据支持此断言?你不相信你的测量设备,还是对你的测量技能缺乏信心?嘿!为了防止您不熟悉Instruments leaks工具,这里有一个技巧可以最大限度地利用它:在底部栏中,单击显示三个稍微缩进的项目的图标。它提供了一个很好的泄漏列表。然后单击该集合中的最后一个图标(半填充的矩形)以显示“扩展细节”。您可以选择一个单独的泄漏,它将为您提供完整的堆栈跟踪,您可以跳转到代码中。真滑!抱歉,如果你已经知道了,但当我最终发现………或者你对自己的测量技能缺乏信心时,我留下了深刻的印象?”第一次使用泄漏工具时,我怀疑我对Objective-C编程的理解和我的测量技能。:-)如果你想得到一个很好的答案,那么最好描述一下为什么你确定并给出一个没有出现的泄漏的示例代码。FWIW,我故意添加了泄漏,而仪器没有发现它们。因此,不要把工具的结果当作福音。问题是,如果你不做“someObject=nil;”部分,如果你不是故意试图制造泄漏,你就不太可能做,那么仪器通常找不到它们。