Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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
Ios Swift中的分配工具未提供足够详细的信息_Ios_Swift_Instruments - Fatal编程技术网

Ios Swift中的分配工具未提供足够详细的信息

Ios Swift中的分配工具未提供足够详细的信息,ios,swift,instruments,Ios,Swift,Instruments,我正在尝试使用分配工具配置Swift 2 iOS应用程序。我是这样做的: 使用分配工具运行应用程序 启动应用程序后,我等待10秒,然后点击“标记代” 我打开我怀疑有内存泄漏的屏幕,等待10秒,关闭它,再等待一段时间,然后点击“标记” 在这一点上,我查看第二代,以查看从未发布过的对象。我的问题是最大的冒犯者总是“main”,它没有指向任何特定的类或方法 如上所示,“main”负责几乎80%的内存泄漏,但是stacktrace不指向任何特定的地方,不像它下面的泄漏指向特定的方法 我不确定这是否相关

我正在尝试使用分配工具配置Swift 2 iOS应用程序。我是这样做的:

  • 使用分配工具运行应用程序
  • 启动应用程序后,我等待10秒,然后点击“标记代”
  • 我打开我怀疑有内存泄漏的屏幕,等待10秒,关闭它,再等待一段时间,然后点击“标记”
  • 在这一点上,我查看第二代,以查看从未发布过的对象。我的问题是最大的冒犯者总是“main”,它没有指向任何特定的类或方法

    如上所示,“main”负责几乎80%的内存泄漏,但是stacktrace不指向任何特定的地方,不像它下面的泄漏指向特定的方法

    我不确定这是否相关,但当我转到文件->符号时,我会显示一个缺少的符号,如下所示。但是,我在机器上的任何位置都找不到此符号:


    我的问题是:这个“主”保持正常的记忆是否正常,或者在我的终点上有一些错误的配置,以至于我看不到真正的堆栈跟踪?

    < P> >有两件事要考虑。

    1:为了了解对象被分配什么,然后不释放,你应该考虑使用分配摘要而不是代。要查找分配摘要,请查看“详细信息”按钮旁边的“代”。单击“生成”,然后切换到“统计”。然后在搜索栏中输入你的应用程序名称(在我的例子中是Fleet),Instruments将只过滤你创建的对象的分配。请参见下面的屏幕外观示例

    现在,要了解对象是否还没有被释放,您需要查看持久列和临时列。持久列显示当前存在的对象数,而临时列显示已存在但已解除分配的对象数。因此,如果您希望释放一个对象,但瞬态列中的数字没有改变,那么您就知道该对象没有被释放,您有问题了

    2:如果您仍然希望使用生成来确定哪些内容占用了所有内存,可以取消选中反转调用树和隐藏系统库选项。例如,在我的屏幕(如下所示)上,您将看到,在A代中,main占用了76.5%的分配内存。深入研究,我能够发现,该分配的大部分(45.2%)用于UIImage

    有关仪器的更多详细信息和精彩教程,请参见:


    希望这有帮助 综上所述,“main”无法点击进入的原因是选择了“invert call tree”选项。取消选中“反转调用树”可以解决问题。

    因为您正在处理一个具有完全机密标识符的完全机密项目,所以您应该按照SO规则的要求创建一个最小项目。否则的话,石膏的数量让我想,你的代码很糟糕。为什么知道我的项目名称会帮助你解决我的问题?你花在石膏上的时间应该像我说的那样投资于创建一个最低限度的项目。你花在批评我的石膏上的时间应该投资于回答我的问题。我绝对不会回答你的问题。你似乎已经忘记了,提问者是谁,你好,理查德。我会接受你的回答,谢谢。我认为我看到的主要区别是,你可以深入到占76%的“主要”分配,而我没有(我不能点击)。在您的示例中,您将解决/修复UIIMAGE使用这么多内存的事实,或者您是否考虑到系统功能的一部分并将其保留下来?我认为您无法深入到您的主要分配中的原因是因为您检查过的选项。如果取消选中反转调用树和隐藏系统库选项,“main”应该可以单击。关于第二个问题。这76%并不意味着占用了大量内存。使用的总内存位于百分比左侧的字节列中。(我的是2583MB,你的是321MB)76%只是总数的百分比。因此,在您的情况下,您应该很好,尽管内存使用情况肯定是您想要观看的内容。