gpt4 book ai didi

objective-c - 什么是 CG 光栅数据?

转载 作者:IT王子 更新时间:2023-10-29 07:56:15 25 4
gpt4 key购买 nike

我试图在我的代码中找到另一个内存泄漏,但我似乎无法弄清楚 CG 栅格数据是什么。在启用自动快照的情况下浏览 VM Tracker 时,CG 光栅数据似乎是唯一增加的部分。这些也在稳步增加,而没有增加分配。

我不完全确定 CG Raster Data 是什么,也不知道如何修复它,但此时增加的占用空间最终会导致内存错误和崩溃,所以这并不好!我做我自己的文本渲染(使用 CoreText),所以我认为这与它有关。我也在加载图片?

下面是脚印的图片: Peaks in the allocations when the pages load (the app loads pages with images and text discretely), the dirty memory always increases though.

更新:这个问题仍然存在,但有趣的是,我可以将它与 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 光栅数据” block ,每个 block 有 65 页。如果我注释掉其中一个位图上下文,我将在 Instruments 中得到一个 65 页的“CG 光栅数据” block 。

另一方面,我的应用程序中也有一个 CATiledLayerCATiledLayer 设置了它自己的图形上下文供我绘制,我相信它使用共享内存创建这些上下文,窗口服务器(springboard 在 iOS 5 上,backboard on iOS 6) 也可以直接访问。我没有看到与这些图形上下文对应的任何“CG 光栅数据” block 。

关于objective-c - 什么是 CG 光栅数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12503185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com