此问题是对此问题的回答的后续问题:instruments-leaks-and-allocations-tvos

最初的问题与我在tvOS应用程序中发生的内存泄漏有关,但我认为该问题的答案通常与iOS / Xcode / Instruments开发有关。

通过移除另一个闭包中的闭包并在第一个闭包中保留对变量的引用,解决了该问题。这导致了保留周期。



我真的很想了解为什么我没有早点找到问题,让我解释一下。

结果是,我以错误的方式使用了Instruments。我进行概要分析时的工作流程如下:

  • 从Xcode,我在Apple TV设备
  • 上运行该应用程序
  • 启动乐器
  • 将Instruments附加到已启动的应用程序

  • 在Instruments中可以看到以下内容:

    ios - 根据分析方法在仪器中获取不同的数据-LMLPHP

    有一些泄漏,但没什么特别的。该图并没有真正增加,甚至一个小时后也没有。我使用这种方法已经很长时间了,从没想到这里可能有问题。

    在阅读有关泄漏,概要分析等内容时,我遇到了一些随机文章,其中有人在使用Xcode(而不是Run)中的Profile按钮。我只是认为这与我所做的相同:运行应用程序,启动Instruments并附加流程。但是,神奇的是,这张图出现了:

    ios - 根据分析方法在仪器中获取不同的数据-LMLPHP

    显然这里有内存泄漏,使用这些数据,发现泄漏很容易做到。

    因此,我真的很想知道这两种方法之间的区别,但是我不能从中做任何事情。任何人 :) ?

    PS:截屏是在2分钟后使用完全相同的代码库截取的,只是将Instruments连接到进程的方式不同。

    最佳答案

    两种方法的区别在于,当您从Xcode中选择Profile时,Instruments从一开始就记录所有内存分配。当您在Xcode中运行应用程序,启动Instruments并附加应用程序时,您将错过将应用程序附加至Instruments之前发生的所有内存分配。如果您想记录应用程序进行的每个内存分配,则从Xcode选择配置文件是更好的选择,因为它从应用程序启动时开始记录。

    要回答有关为什么在Xcode中选择“运行”和“配置文件”时Instruments为何具有不同数据的问题,我怀疑是因为它们运行的​​应用程序版本不同。选择“在Xcode中运行”时,Xcode最初设置为使用“调试”构建配置,而选择“配置文件”时,则设置为使用“发布”构建配置。仪器可以显示不同的内存使用情况以进行调试和发布。您可以编辑方案以查看用于运行和分析的构建配置。

    关于ios - 根据分析方法在仪器中获取不同的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43388395/

    10-14 16:54