Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.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 iOS应用程序中的内存泄漏-ARC_Iphone_Ios_Objective C_Sdk_Instruments - Fatal编程技术网

Iphone iOS应用程序中的内存泄漏-ARC

Iphone iOS应用程序中的内存泄漏-ARC,iphone,ios,objective-c,sdk,instruments,Iphone,Ios,Objective C,Sdk,Instruments,我很难弄清楚我的应用程序在哪里泄漏。我已经用“Instruments”评测应用程序通过分配和HeapShot对其进行了测试。这就是我得到的: 正如您所看到的,分配正在增加。每次我在两个视图之间切换时,它都会增加,并具有淡入淡出效果。当我通过heapshot/heapshot时,为了找到泄漏,我应该查看以下哪些heapshot?我应该查看哪些类型的对象 提前感谢您的帮助:) 使用“分析”选项构建代码;跟踪并消除每个问题。使用“分析”选项构建代码;跟踪并消除每个问题。只有在您不再保留对内存的任何引

我很难弄清楚我的应用程序在哪里泄漏。我已经用“Instruments”评测应用程序通过分配和HeapShot对其进行了测试。这就是我得到的:

正如您所看到的,分配正在增加。每次我在两个视图之间切换时,它都会增加,并具有淡入淡出效果。当我通过heapshot/heapshot时,为了找到泄漏,我应该查看以下哪些heapshot?我应该查看哪些类型的对象


提前感谢您的帮助:)

使用“分析”选项构建代码;跟踪并消除每个问题。

使用“分析”选项构建代码;跟踪并消除每个问题。

只有在您不再保留对内存的任何引用时,ARC才能解除对内存的分配。由于leaks工具没有显示任何“真正”的泄漏(在您不再有权访问的内存的意义上),您可能看到了一个内存被丢弃的情况。您仍然持有对不再需要的对象的引用,因此它们不会被释放

在基线之后检查哪个快照并不重要。不过,快照中的对象列表可能有点过于庞大。。。但通常将其过滤到您自己的类中会有所帮助。可以通过在右上角的搜索字段中键入类前缀来完成此操作。如果快照中没有显示任何类,则至少可以查找直接使用的类

另外,确保在分配工具的检查器窗格中启用“记录参考计数”选项。启用此选项后,您可以单击快照中列出的对象(不是类名,而是由其内存地址表示的对象)旁边的小右箭头,并查看此对象的完整历史记录。这使得查看谁持有对它的引用变得更容易


希望这有帮助

ARC只能在您不再持有对内存的任何引用时解除分配内存。由于leaks工具没有显示任何“真正”的泄漏(在您不再有权访问的内存的意义上),您可能看到了一个内存被丢弃的情况。您仍然持有对不再需要的对象的引用,因此它们不会被释放

在基线之后检查哪个快照并不重要。不过,快照中的对象列表可能有点过于庞大。。。但通常将其过滤到您自己的类中会有所帮助。可以通过在右上角的搜索字段中键入类前缀来完成此操作。如果快照中没有显示任何类,则至少可以查找直接使用的类

另外,确保在分配工具的检查器窗格中启用“记录参考计数”选项。启用此选项后,您可以单击快照中列出的对象(不是类名,而是由其内存地址表示的对象)旁边的小右箭头,并查看此对象的完整历史记录。这使得查看谁持有对它的引用变得更容易


希望这有帮助

查看stacktrace以了解您在哪里分配这些东西。它是ARC:)。。。。我试试看。在不同的堆快照之后,分配的字节应该是0字节,这是正确的吗?:)谢谢:)。您是在模拟器上还是在设备上测试代码?因为根据我的经验,有关内存泄漏的仪器结果并不精确,但在实际设备上,结果是正确的。我正在我的设备上测试:),但当我转换到新视图时,是否正确理解对象应该被释放(由编译器,ARC)?谢谢:)查看stacktrace以了解您在哪里分配这些东西。它是ARC:)。。。。我试试看。在不同的堆快照之后,分配的字节应该是0字节,这是正确的吗?:)谢谢:)。您是在模拟器上还是在设备上测试代码?因为根据我的经验,有关内存泄漏的仪器结果并不精确,但在实际设备上,结果是正确的。我正在我的设备上测试:),但当我转换到新视图时,是否正确理解对象应该被释放(由编译器,ARC)?谢谢:)我已经试过了,但我没有得到任何“错误”。谢谢你的回答:)我已经试过了,但我没有得到任何“错误”。谢谢你的回答:)