减少核心动画内存使用量的提示

时间:2009-02-11 13:24:30

标签: cocoa memory core-animation calayer

所以情况如下:

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

我希望使用CALayer会有一些轻微的开销,但我的示例应用程序(仅完全按照上面所做的那样)显示了大约33Mb RSIZE,22Mb RPVT和30Mb RSHRD的使用情况。我注意到,当以64位运行应用程序而不是以32位进程运行时,这些数字要好得多。

我在这个例子来自的实际应用程序中正在做我能想到的一切,包括重新采样我的CGImageRef只是图层的大小,但这对我来说似乎无关紧要 - 这不应该更简单吗? / p>

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

1 个答案:

答案 0 :(得分:4)

首先,你会遇到一个普通CALayer尺寸图像的问题,因为你可能会达到2048 x 2048的纹理大小限制(取决于你的显卡)。像这样的应用程序是CATiledLayer的设计目的。 Bill Dudney在他的blog(大型PDF)以及the code that accompanies his book上都有一些代码示例。

对我来说,这样一个大图像需要占用大量内存并不奇怪,因为它将被存储为CGImage中的未压缩位图。除了将图像缩放到您需要的分辨率,并使用CATiledLayer进行平铺之外,我想不出多少。一旦将CGImageRef分配给CAlayer的内容,您是否正在发布CGImageRef?你不需要在那时坚持下去。