在Xcode的分配工具模板中,“Persistent”和“Transient”列的真正含义是什么?

16
我正在尝试理解“Allocation Template”中的“瞬态(transient)”和“持久(persistent)”列的含义。从这个教程http://www.raywenderlich.com/97886/instruments-tutorial-with-swift-getting-started中,我发现:“‘持久(persistent)’列计算每种类型的对象当前在内存中存在的数量。‘瞬态(transient)’列显示已经存在但已被释放的对象数量。持久对象使用内存,瞬态对象已释放其内存。”
根据上述说明,从图片中所选的统计表格行可以得出结论,当前存在2个NSFileManager对象,并且已经创建了19个对象并已释放。
但这对于iOS应用程序的优化或性能问题意味着什么? 比如,这里19个瞬态对象的总数相当大,如果可能的话,应该尽量减小这个数字,以增加应用程序的有效内存可用性或其他方面的优化。
2个回答

5

性能优化的核心目标是使应用程序保持活跃和响应迅速。关于优化的关键指标不是单个对象的瞬态或持久计数。

根据信息,你的NSFileManager每个对象使用16字节。因此,当前持久的是32 (2 * 16),总共是336 (21 * 16)。

高持久内存表示给定对象的当前占用空间非常高。高总内存表示过去的占用空间可能很高(如果这些分配的子集是同时进行的)

在优化时,应主要关注以下两个方面:
1. 应用程序加载时最小内存占用为多少。
2. 最大内存占用是多少(需要提出使用案例来确定这一点)。

随着内存占用增加,应用程序的性能会下降,因为操作系统进行多次页面交换以释放内存。可以通过VM跟踪器工具来跟踪此情况。优化意味着使平均内存占用低于该点。


3
持久化对象占用内存,瞬态对象已释放其内存。
第一个数字表示持久化对象的数量。这是在当前时间点上在您的项目中被强引用的持久化对象的数量。第二个数字表示瞬态对象的数量。这是曾经被强引用但现在不再存在的已释放对象的数量。这很有用,因为它可以让您知道对象是否被正确清理或在特定时间点内是否不再被保留。第三个数字表示总数。这是持久化和瞬态对象的总数加在一起的数量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接