这个问题是对以下问题的后续问题:instruments-leaks-and-allocations-tvos
最初的问题与我在tvOS应用程序中的内存泄漏有关,但我认为这个问题的答案一般与iOS/Xcode/tvOS的开发有关。
通过删除另一个闭包中的闭包,在第一个闭包中保留对变量的引用,解决了这个问题。这导致了一个保留周期。
问题
让我解释一下,我真的很想明白为什么我没有早点发现这个问题。
结果,我用错了仪器。分析时我的工作流程如下:
以下内容可在文书中看到:

有一些漏洞,但没什么特别之处。图表并没有真正增加,甚至一个小时后也没有增加。我用了很长一段时间,从来没有想过这里会有什么问题。
在阅读有关泄漏、分析等的文章时,我偶然看到一些文章,其中有人在使用Xcode中的Profile按钮(而不是Run)。我只是认为这和我所做的一样:运行应用程序,启动仪器和附加进程。但是,神奇的是,这个图表出现了:

显然,这里存在内存泄漏,使用这些数据,查找泄漏非常容易。
所以我真的想知道这两种方法的区别是什么,但我不能从中得到任何东西。任何人:)?
PS:截图是用完全相同的代码库在对方两分钟后拍摄的,只是将仪器连接到这个过程的另一种方式。
发布于 2017-04-13 18:21:07
这两种方法的不同之处在于,当您从Xcode中选择Profile时,仪器从一开始就记录所有内存分配。当您在Xcode中运行应用程序、启动工具和附加应用程序时,您将错过将应用程序附加到仪器之前发生的所有内存分配。从Xcode中选择配置文件是更好的选择,如果您想记录应用程序的每一个内存分配,因为它是从应用程序启动开始记录的。
要回答您的问题,为什么当您选择Xcode中的Run和Profile时,仪器拥有不同的数据,我怀疑这是因为它们运行的是不同的应用程序构建。Xcode最初被设置为在选择在Xcode中运行时使用Debug构建配置,并在选择Profile时设置为使用发行版构建配置。仪器可以显示调试和发布版本的不同内存使用情况。您可以编辑您的方案以查看用于运行和分析的生成配置。
https://stackoverflow.com/questions/43388395
复制相似问题