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

Abh*_*ert 10 memory-leaks objective-c instruments ios

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

当我运行"分配"工具时,它说我有大约2MB的"实时字节",当我在应用程序中移动时,数字大致保持不变(当应用程序繁忙时,峰值达到3MB左右,但随后又下降低至2MB).

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

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

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

它还将绘图的结果缓存在UIImage中,并且它们保存在先进先出的数组中,该数组不会增长到超过500KB.

hot*_*aw2 13

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


Abh*_*ert 11

事实证明我的问题是NSZombieEnabled.

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