我试图在我的代码中发现另一个内存泄漏,而且我似乎无法弄清楚什么是CG Raster数据。通过启用了自动快照的VM Tracker时,CG栅格数据似乎是唯一增加的部分。这些也稳步增加,而分配却没有增加。
我不能完全确定CG栅格数据是什么,也不能确定该如何解决,但是在这一点上,占用空间的增加最终会导致内存错误和崩溃,所以不好!我做自己的文本渲染(使用CoreText),所以我认为这与它有关。我也在加载图片吗?
以下是足迹的图像:
更新:,此问题仍然存在,但有趣的是,我可以将其与UIFoundations中的“NSConcreteGlyphGenerator”泄漏相关联。似乎只有当我在实际绘制的CoreText方法中对属性字符串调用“boundingRectWithSize:”方法时,才会发生这种情况。具体来说,该行是:
[displayString boundingRectWithSize:CGSizeMake( self.frame.size.width, self.frame.size.height ) options:0 context:nil];
慢慢追踪...
最佳答案
我不知道“CG栅格数据”可能包含的所有内容,但我肯定知道的一件事是……Core Graphics分配的内存,用于存储栅格数据(也称为位图)。
具体来说,在我的应用中,我使用CGBitmapContextCreate
创建了两个256x256位图上下文。我将NULL
作为data
参数传递,以便Core Graphics为我分配位图内存。每个像素具有32位(4字节)的256x256位图需要256 KiB = 64页,每页4 KiB。在Instruments中,我得到了两个“CG栅格数据”块,每个块65页。如果我注释掉那些位图上下文之一,则在Instruments中只会得到一个65页的“CG栅格数据”块。
另一方面,我的应用程序中也有一个CATiledLayer
。 CATiledLayer
设置了自己的图形上下文供我使用,我相信它会使用窗口服务器(iOS 5上的springboard
,iOS 6上的backboard
)也直接访问的共享内存创建这些上下文。我看不到任何与那些图形上下文相对应的“CG栅格数据”块。
关于objective-c - 什么是CG栅格数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12503185/