iOS上的活动监视器中的实时字节与实内存

时间:2012-01-09 20:48:12

标签: objective-c ios memory-leaks instruments

我正在开发一个iOS应用程序,它会创建许多小对象和浮动,并试图了解它消耗的内存使用量。

当我运行“Allocations”乐器时,它说我有大约2MB的“Live Bytes”,当我在应用程序中移动时,这个数字大致保持不变(当应用程序繁忙时,峰值达到3MB左右,但是然后降回到2MB)。

但是当我运行“Activity Monitory”乐器时,我的应用程序的“真实内存”一旦完成启动就会达到25MB,并且在我的CALayer内部进行绘图时会快速增长。在不到一分钟的时间内,它超过了100MB。

为什么“Live Bytes”显示2MB,但“Real Memory”显示100MB?

我的CALayer正在绘制的路径,它将CPU固定为100%几秒钟才完成单个绘制操作,并且它将所有这些点从NSData对象加载到CGPoint值,然后再次释放它们(NSData对象是正在绘制的点的压缩版本,存储从一个点到下一个点的增量,所以我将它保存在RAM但不保留实际的CGPoints)。

它还将绘图的结果缓存在UIImage中,并且它们保存在先进先出的数组中,不会增长到大约500KB以上。

2 个答案:

答案 0 :(得分:13)

真实内存号码包括您的应用已使用且已经发布的内存块,但操作系统尚未打算回收或重用(但如果需要,可以)。实时内存是“脏”内存,如果您的应用程序正在运行并且内存太紧,操作系统无法在不中断应用程序的情况下回收内存。

答案 1 :(得分:11)

事实证明我的问题是NSZombieEnabled

编辑方案>中禁用该功能运行>参数>环境变量解决了额外的内存使用问题。