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

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

当我运行“Allocations”乐器时,它说我有大约2MB的“Live Bytes”,而且当我移动应用程序时,这个数字大致保持不变(当应用程序忙时尖峰高达3MB左右,降至2MB)。

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

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

我的CALayer正在绘制大量的path,为了完成一次绘制操作,它将CPU挂在100%几秒钟,并将所有这些点从一个NSData对象中加载到CGPoint值中,然后重新分配它们(NSData对象是绘制点的压缩版本,存储从一个点到下一个点的增量,所以我把它保存在RAM中,但不保留实际的CGPoints)。

它也将绘制的结果caching在UIImage中,这些都保存在先进先出的数组中,不会超过大约500KB。

真正的内存数量包括你的应用程序已经使用和已经释放的内存块,但操作系统并没有打扰回收或重用(但如果需要的话)。 实时内存是“脏”的内存,如果您的应用程序正在运行且内存太紧,操作系统无法回收这些内存。

原来我的问题是NSZombieEnabled

Edit Scheme> Run> Arguments> Environment Variables中禁用它解决了额外的内存使用。