3

所以情况如下:

我有一个屏幕大小的 CALayer,我将内容属性设置为 2 Mb JPEG,大小约为 3500 x 2000 像素,分辨率为 240ppi。

我预计使用 CALayer 会产生轻微的开销,但我的示例应用程序(仅执行上述操作)显示使用了大约 33Mb RSIZE、22Mb RPVT 和 30Mb RSHRD。我注意到当以 64 位运行应用程序时,这些数字比以 32 位进程运行时要好得多。

我正在做我在这个示例来自的实际应用程序中能想到的所有事情,包括将我的 CGImageRefs 重新采样为仅是图层的大小,但这对我来说似乎无关紧要 - 它不应该更简单吗?

有没有人遇到过减少 CALayers 和 CGI​​mageRefs 使用的内存量的好方法?

4

1 回答 1

4

首先,您将遇到在普通 CALayer 中大小的图像的问题,因为您可能会达到 2048 x 2048 的纹理大小限制(取决于您的显卡)。像这样的应用程序就是 CATiledLayer 的设计目的。Bill Dudney 在他的博客(大 PDF)上有一些代码示例,以及他的书随附的代码

考虑到它将作为未压缩的位图存储在 CGImage 中,如此大的图像会占用如此多的内存对我来说并不奇怪。除了将图像缩放到所需的分辨率并使用 CATiledLayer 平铺之外,我想不到太多。将 CGImageRef 分配给 CAlayer 的内容后,您是否正在释放它?那时你不需要坚持下去。

于 2009-02-11T18:06:39.423 回答