Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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_Xcode4_Instruments - Fatal编程技术网

Iphone 文书中是否有条目;“泄漏块”;应用程序运行期间是否存在内存泄漏?

Iphone 文书中是否有条目;“泄漏块”;应用程序运行期间是否存在内存泄漏?,iphone,xcode,memory-leaks,xcode4,instruments,Iphone,Xcode,Memory Leaks,Xcode4,Instruments,在应用程序运行期间,Instruments“Looked block”中的条目是否意味着内存泄漏 也就是说,如果一个iPhone应用程序已经使用了一半,您可能保留了一些变量,但它还没有到达应用程序的发布部分,那么这些是否显示为泄漏块 如果答案是未完成的变量在这里显示为泄漏块,那么这将非常令人困惑,如果您正在停止/暂停仪器,在这种情况下,如何以一种方式运行仪器,使您看到的任何泄漏块都是有效的内存泄漏?(例如,需要先关闭应用程序以结束一切,然后再查看仪器?您应该将泄漏测试拆分为逻辑单元,无论是基于视

在应用程序运行期间,Instruments“Looked block”中的条目是否意味着内存泄漏

也就是说,如果一个iPhone应用程序已经使用了一半,您可能保留了一些变量,但它还没有到达应用程序的发布部分,那么这些是否显示为泄漏块


如果答案是未完成的变量在这里显示为泄漏块,那么这将非常令人困惑,如果您正在停止/暂停仪器,在这种情况下,如何以一种方式运行仪器,使您看到的任何泄漏块都是有效的内存泄漏?(例如,需要先关闭应用程序以结束一切,然后再查看仪器?

您应该将泄漏测试拆分为逻辑单元,无论是基于视图还是基于功能。从头开始,彻底测试初始视图,修复问题,移动到下一个视图,等等。我建议在测试泄漏之前运行静态分析器

您应该将泄漏测试拆分为逻辑单元,可以是基于视图的,也可以是基于功能的。从头开始,彻底测试初始视图,修复问题,移动到下一个视图,等等。我建议在测试泄漏之前运行静态分析器

Instruments中的泄漏表示Instruments无法找到从任何一组“根”指针开始的指向已分配内存的指针。具体而言,从以下方面:

泄漏工具记录应用程序中发生的所有分配事件,然后定期搜索应用程序的可写内存、寄存器和堆栈,以查找对任何活动内存块的引用。如果在其中一个位置未找到对某个块的引用,则会将该块视为“泄漏”,并在“详细信息”窗格中显示相关信息

因此,只要在IVAR、局部变量或静态变量中有一个指向它的指针,保留某些内容就不是泄漏。但有一些方法可能会让泄漏工具变得混乱,有时苹果的框架存在漏洞,有时工具存在缺陷


随着时间的推移,或者在执行特定操作时,您所寻找的关于泄漏的内容是稳定的,并且泄漏的内存量会显著增加。微小的一次性泄漏通常不值得追踪。

仪器中的泄漏表示仪器无法从任何一组“根”指针开始找到指向已分配内存的指针。具体而言,从以下方面:

泄漏工具记录应用程序中发生的所有分配事件,然后定期搜索应用程序的可写内存、寄存器和堆栈,以查找对任何活动内存块的引用。如果在其中一个位置未找到对某个块的引用,则会将该块视为“泄漏”,并在“详细信息”窗格中显示相关信息

因此,只要在IVAR、局部变量或静态变量中有一个指向它的指针,保留某些内容就不是泄漏。但有一些方法可能会让泄漏工具变得混乱,有时苹果的框架存在漏洞,有时工具存在缺陷


随着时间的推移,或者在执行特定操作时,您所寻找的关于泄漏的内容是稳定的,并且泄漏的内存量会显著增加。微小的一次性泄漏通常不值得追查。

谢谢-就我的具体问题而言,我今天所做的最新测试似乎表明,在分析器运行期间的任何时候,如果泄漏块表中有条目,这意味着真正的泄漏,然而,我不是100%确定这一点-这是我希望确认的…@Greg让我们假设您正在进行密集计算,这需要5分钟才能完成,同时使用仪器进行分析。如果在30秒时,仪器显示内存泄漏——就是这样,您可能正在泄漏一个对象。这意味着你没有正确地管理你的对象,在30秒的时间里,没有一个对象对泄漏对象有引用,或者更确切地说:知道泄漏对象的最后一个对象不知何故丢失了它的内存地址/位置,没有人能再找到它。也许最后一个对象正确地释放了泄漏的对象,但另一个对象忘记了释放。@Greg如果在2.5分钟关停仪器,在此之前分配和释放的对象将不再存在。如果在这段时间内,单个对象驻留在内存中,而没有其他对象知道它,那就是泄漏。当然,您始终可以执行类似alloc+init对象的操作,将其内存地址保存到文件(@“%p”,object)中,并在15分钟后检索它。仪器可能会告诉您对象正在泄漏,因为您隐藏了仪器的引用。我不知道你为什么一开始就做那样的事。。。你可以试试,看看仪器的反应:)@Greg无论如何,我希望我解释了一两件事,但仔细阅读了@Rob Napier的答案,从中可以学到很多东西,这也是正确的答案。我认为你的问题是错误的:)谢谢-就我的具体问题而言,我今天所做的最新测试似乎表明在分析器运行期间的任何时候,如果泄漏块表中有条目,这意味着真正的泄漏,然而,我不是100%确定这一点-这是我希望确认的…@Greg让我们假设您正在进行密集计算,这需要5分钟才能完成,同时使用仪器进行分析。如果在30秒时,仪器显示内存泄漏——就是这样,您可能正在泄漏一个对象。这意味着你没有正确地管理你的对象,在30秒的时间里,没有一个对象对泄漏对象有引用,或者更确切地说:知道泄漏对象的最后一个对象不知何故丢失了它的内存地址/位置,没有人能再找到它。也许最后一个对象正确地释放了泄漏对象,但另一个对象