我最近在我的应用程序中遇到了一些内存管理问题。
该应用程序利用了一些高质量的图像,这极大地增加了内存使用量。
以下是有关项目和图像详细信息的一些信息,以使问题更加清晰:
我的项目中添加了大约 90 张图像。其中一半采用@2x 尺寸设计,以支持新 iPad 视网膜显示屏。因此,每个设备的最大图像数量约为 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
任何想法为什么分配的内存比图像的总大小高很多?