Recientemente me he enfrentado a un problema de administración de memoria en mi aplicación.Uso extremadamente alto de la memoria: ¿cómo manejar grandes imágenes en el iPad?
La aplicación tiene ventajas de algunas imágenes de alta calidad y esto aumenta extremadamente el uso de memoria.
Aquí están algunas informaciones sobre los proyectos e imágenes de detalles para hacer más clara la cuestión:
Hay alrededor de 90 imágenes añadidas a mi proyecto. La mitad de ellos están diseñados en tamaño @ 2x para admitir la nueva pantalla Retina para iPad. Por lo tanto, la cantidad máxima de imágenes para cada dispositivo es de alrededor de 45.
El tamaño total de la versión Retina de todas las imágenes es de alrededor de 25 MegaBytes (el tamaño de cada imagen individual es variable de 10 KB a 6.8 MB). Mientras tanto, el tamaño de todas las imágenes estándar es igual a 11 MegaBytes.
El tamaño del archivo XCode del proyecto es igual a 44 megabytes.
resolución máxima de imágenes Indivisual en versión estándar de imágenes es de alrededor de 1500x4000 píxeles, mientras que el mínimo es de alrededor de 60x60 píxeles.
La resolución máxima de las imágenes indivisuales en la versión Retina de las imágenes es de alrededor de 3000x8000 px, mientras que la mínima es de alrededor de 120x120 px.
La versión de Retina de las imágenes tiene el sufijo "@ 2x ~ ipad" en su nombre, mientras que el sufijo del nombre para los demás es "~ ipad".
Sólo hay una instancia de la mayoría de las imágenes se crea durante el ciclo de vida de aplicaciones.
Alrededor de 25 de las imágenes se cargan durante el lanzamiento de aplicaciones y el resto se cargan durante el juego.
He utilizado [UIImage imageNamed: @ "image_name.png"] donde quiera que cargue una imagen (usando [UIImage imageWithContentsOfFile] y [UIImage imageWithData] fue extremadamente ineficiente).
Pero aquí es que hay un problema:
Cuando rastrear el uso de la memoria utilizando instrumentos veo que el uso de memoria de aplicación es extremadamente alta. Estas son las estadísticas de la asignación de memoria en diferentes situaciones:
memoria asignada en el iPad 2 usando imágenes estándar en el inicio: 58 MB
memoria asignada en el iPad 2 usando imágenes estándar durante el juego (cuando todas las imágenes están cargados): 131 MB
- memoria asignada en el nuevo iPad el uso de imágenes de la retina en el inicio: 211 MB
- memoria asignada en el nuevo iPad el uso de imágenes de la retina durante el juego (cuando se cargan todas las imágenes): 470 MB
Cualquier idea por qué memoria asignada es mucho más alto que el tamaño total de las imágenes?
¿Por qué está cargando todas las imágenes en la memoria? Debes evitar usar el UIImage imageNamed, y en su lugar usar UIImage imageWithContentsOfFile, ya que el último no está cargando la imagen permanentemente en la memoria ... Además, si tus imágenes son enormes, debes dibujarlas en una clase CATiledLayer, para que dibuje de manera más eficiente a la pantalla – Lefteris
Estoy cargando todas las imágenes en la memoria porque todas son necesarias antes y durante el juego. No sigue un diseño habitual como otras aplicaciones, y se requiere cargar esas imágenes. En otras palabras, estoy cargando cada imagen solo cuando es necesario, pero el problema es que es necesario que todas ellas se carguen al inicio: D –