所以情况是这样的:
我有一个屏幕大小的CALayer,我将contents属性设置为2MbJPEG,大小约为3500 x 2000像素,分辨率为240ppi。
我希望在使用CALayer时会有一些开销,但我的示例应用程序(它只执行上面的操作)显示了大约33MbRSIZE、22MRPVT和30MbRSHRD的使用。我注意到,当以64位运行应用程序时,这些数字比作为32位进程运行时要好得多。
我在这个示例所来自的真实应用程序中做了我能想到的所有事情,包括重新采样我的CGImageRefs,使其仅为层的大小,但这对我来说似乎是无关紧要的-它不应该更简单吗?
有没有人发现了减少内存、CALayers和CGImageRefs使用量的好方法?
发布于 2009-02-11 10:06:39
首先,在普通CALayer中使用这种大小的图像会遇到问题,因为您可能会达到2048x2048的纹理大小限制(取决于您的显卡)。像这样的应用程序就是CATiledLayer的设计目标。Bill Dudney在他的blog (一个大型的PDF)和the code that accompanies his book上都有一些代码示例。
考虑到它将作为未压缩的位图存储在CGImage中,所以这么大的图像会占用如此多的内存对我来说并不奇怪。除了将图像缩放到所需的分辨率,并使用CATiledLayer对其进行平铺之外,我想不了太多。在将CGImageRef分配给CAlayer的内容之后,是否要释放它?在这一点上,您将不需要坚持下去。
https://stackoverflow.com/questions/536735
复制