谢谢。
谢谢。
我认为这是因为OpenGL ES所使用的内存在ObjectAlloc中不可见,但在Memory Monitor中计算。例如,查看zoul在他的问题here中的测试,他观察到创建纹理时ObjectAlloc会稍微增加一些内存,但当传递给OpenGL ES后,该内存从该工具中消失。 Memory Monitor仍跟踪该纹理内存。
这应该包括UI元素的视觉方面,例如图层和视图,因为CALayer实际上是OpenGL ES纹理的包装器。您的UI元素的实际2D图像表示似乎没有被ObjectAlloc跟踪,这导致了ObjectAlloc中更低的总值。
ObjectAlloc仍然适用于跟踪分配数量和类型,随着堆快照功能的出现,它变得更加有价值。您只需要与Memory Monitor一起使用,以查看真正的总体内存使用情况。
对于看到这篇文章的2012年之后的读者:
在VM Tracker Instrument中,真正加载到设备物理内存中的内存是Resident Memory。
Allocation Instrument只标记由malloc/[NSObject alloc]和一些框架缓冲区创建的内存,例如,解压缩的图像位图不包含在Allocation Instrument中,但它总是占用大部分内存。
请观看苹果公司的WWDC 2012 Session 242 iOS App Performance: Memory以获取更多信息。
内存监视器将计算应用程序持有的大部分或全部资源,包括在内核级别间接分配的资源。这包括像Brad建议的视频内存(纹理等)以及内存映射文件和可能是较大的内核结构,如套接字。列表可能相当长...
在GCD的调度调用括号内封装的任何代码都会被屏蔽掉两件事情:错误报告和有时的分配计数。这通常只适用于CoreFoundation或任何其他非UIKit或非NSFoundation的东西。