仪器与iOS:为什么内存监视器不同意分配?

从乐器的屏幕截图中可以看出,Allocations认为我的应用程序(Ongo)只使用了7.55MB的内存,而Memory Monitor则使用了53.30。 此外,免费系统内存与应用程序正在使用的内存量几乎没有任何关联。 有谁知道为什么这两个工具之间有这么大的分歧? 另外,是否有可能find低系统内存的来源或如何防止这么快耗尽? 我的应用程序似乎没有泄漏内存,但不知何故,它耗尽了系统资源。

谢谢

乐器Y U Lie?

对于那些在2012年之后看到这个职位的人:

真正加载到设备物理内存中的内存是VM跟踪器仪器中的驻留内存。

分配工具只标记由malloc / [NSObject alloc]和一些框架缓冲区创build的内存,例如,解压缩的图像位图不包含在分配工具中,但它总是占用大部分内存。

请观看WWDC 2012 Session 242 iOS应用程序性能:内存获取来自Apple的信息。

我相信这是由于OpenGL ES的内存使用从ObjectAlloc中隐藏,但计入内存监视器。 例如,在他的问题中看到zoul的testing,他在ObjectAlloc中观察到创build纹理时略有上升,但是当传递给OpenGL ES时,该内存从该工具中消失。 内存监视器仍然跟踪该纹理内存。

这应该包括UI元素的视觉方面,比如图层和视图,因为CALayers是OpenGL ES纹理的有效包装。 UI元素的实际2D图像表示看起来不被ObjectAlloc跟踪,这导致ObjectAlloc中的总值更低。

ObjectAlloc仍然适用于跟踪数字和分配types,并且自堆积function出现以来更为有用。 你只是想与内存监视器合作,看看你真正的整体内存使用情况。

内存监视器将统计应用程序拥有的大部分或全部资源,包括在内核级别间接分配的资源。 这包括Bradbuild议的AFAIKvideo内存(纹理等),还包括内存映射文件和可能的大内核结构,如套接字。 该名单可能相当长…

封装在对GCD的调度大括号中的任何代码都被屏蔽了两件事情:错误报告和有时是分配计数。 这通常只适用于CoreFoundation或其他任何非UIKit或非NSFoundation。