极高的内存使用率 - 如何在iPad上处理大图像?

Unk*_*Bit 5 memory-management instruments large-files ipad ios

我最近在我的应用程序中遇到了一些内存管理问题.

该应用程序利用了一些高质量的图像,这极大地增加了内存使用量.

以下是有关项目和图像详细信息的一些信息,以使问题更加清晰:

  • 我的项目中添加了大约90个图像.其中一半设计为@ 2x尺寸,以支持新iPad Retina显示屏.因此,每个设备的最大图像数量约为45.

  • 所有图像的Retina版本的总大小约为25兆字节(每个单独图像的大小可在10 KB到6.8 MB之间变化).同时,所有标准图像的大小等于11兆字节.

  • 项目的XCode存档大小等于44兆字节.

  • 标准版图像中的单个图像的最大分辨率约为1500x4000像素,而最小值约为60x60像素.

  • Retina版图像中的单个图像的最大分辨率约为3000x8000像素,而最小分辨率约为120x120像素.

  • Retina版图像的名称后缀为"@ 2x~ipad",其他名称后缀为"~ipad".

  • 在应用程序生命周期中只创建了大多数图像的一个实例.

  • 在应用程序启动期间加载了大约25个图像,其余图像在游戏过程中加载.

  • 我用[UIImage的imageNamed:@ "image_name.png"]无论我要加载的图像(使用[UIImage的imageWithContentsOfFile]和[UIImage的imageWithData]为极其低效).

但这里有问题:

当我使用Instruments跟踪内存使用情况时,我发现应用程序的内存使用率非常高.以下是不同情况下内存分配的统计信息:

  • 在启动时使用标准图像在iPad 2上分配内存:58 MB

  • 在游戏过程中使用标准图像在iPad 2上分配内存(加载所有图像时):131 MB

  • 在启动时使用Retina图像在新iPad上分配内存:211 MB
  • 在游戏过程中使用Retina图像在新iPad上分配内存(加载所有图像时):470 MB

任何想法为什么分配内存比图像的总大小高很多?

mas*_*sam 0

这可能是因为您使用的图像是用 png 或 jpg 压缩的,并且解码到内存时的大小比原始文件大小大得多。无论图像内容如何,​​它都会占用宽度*高度*4字节的内存。