2012-02-07 10 views
16

¿Cuál es la mejor manera de cargar imágenes desde el haz principal de la aplicación. Estoy usandoLa mejor manera de cargar imágenes a partir paquete de aplicaciones

[UIImage imageNamed: "image.png"]; 

Pero he oído que esto no es bueno en términos de uso de la memoria y el rendimiento. ¿Alguien puede dar su opinión al respecto? Mi aplicación lee muchas imágenes del paquete principal en el momento del lanzamiento. Quiero hacer que este proceso sea lo más eficiente posible.

Saludos

+0

Quieres decir: '' '[UIImage imageNamed: @" image.png "];' '' olvidó la '' '' '' @ :) –

Respuesta

7

Si quieres probar la carga de las imágenes sin necesidad de almacenamiento en caché, se puede usar:

[[UIImage alloc] initWithContentsOfFile:@"image.png"]; 

Esto podría ser un poco más rápido al cargar la imagen por primera vez, ya que no tiene que guardarla primero en la memoria caché. Si solo necesita usar estas imágenes una vez, probablemente tenga sentido intentarlo de esta manera. La otra ventaja de hacerlo de esta manera es que no tendrá una memoria caché de imágenes que consuma memoria por más tiempo de lo necesario.

+0

pero para muchas de las imágenes que esto no sea el mejor manera ...... –

+0

La pregunta es sobre el uso de la memoria y el rendimiento al cargar imágenes, no es la mejor manera de obtener una lista de archivos de imágenes del paquete. Si tiene muchas imágenes, entonces la forma alternativa de cargarlas que pueden proporcionar un mejor rendimiento es lo que he descrito. – UIAdam

+0

si usted lee toda la cuestión cuidadosamente, obtendrá la respuesta lo que quiere. –

0

para encontrar un archivo de recursos única usando NSBundle

NSBundle* myBundle = [NSBundle mainBundle]; 

NSString* myImage = [myBundle pathForResource:@"Seagull" ofType:@"jpg"]; 

y para la búsqueda de múltiples recursos:

NSBundle* myBundle = [NSBundle mainBundle]; 

NSArray* myImages = [myBundle pathsForResourcesOfType:@"jpg" 
           inDirectory:nil]; 
+0

No veo cómo esto aborda la cuestión – UIAdam

+0

Hola No estoy buscando para encontrar un mecanismo para la creación de una ruta de la imagen que quiero.. algo que puede mejorar el uso de la memoria y el rendimiento cuando me carga las imágenes de haz principal. – Aqueel

+0

ya sé, la segunda opción es también la mejor manera relacionada con un problema de rendimiento si tiene varias imágenes. –

13

Si hubiera una verdadera "mejor manera", los medios para cargar imágenes no existirían múltiples maneras (a menos que por razones históricas). Por lo tanto, un poco de comprensión le servirá mejor que destilar una respuesta a una "Mejor Manera".

+[UIImage imageNamed:] caja de imagen para su reutilización, y es un valor predeterminado razonable para la mayoría de los propósitos. El almacenamiento en caché es excelente si se usa correctamente. La memoria caché es buena porque puede minimizar las lecturas de su disco y el uso de la memoria al compartir y reutilizar las imágenes cargadas, en lugar de leer y asignar una copia para cada imagen que debe mostrar. Considera una imagen de icono que utilizas en varias pantallas: ¿te gustaría que los datos de imagen se lean y reasignen cada vez? Esto puede resultar en lecturas redundantes y asignaciones de datos de imagen idénticos. Si no, usa los métodos de almacenamiento en caché.

Si se carga la imagen de una sola vez y con pereza, entonces es posible que desee considerar enfoques no-caché.

  • Los datos de imagen pueden consumir mucha memoria.
  • lectura de una imagen puede tardar mucho tiempo - no sólo/S de disco, sino también convertirlo en una representación UIImage utilizable (por ejemplo, la descompresión de la imagen).
  • También hay momentos en los que debe cambiar el tamaño/escalar una imagen. entonces querrías una copia escalada.

En resumen, hay muchas consideraciones, pero si tiene recursos de escala adecuada que reutilice, el almacenamiento en caché suele ser la opción correcta.

Si sus activos no tienen el tamaño adecuado, entonces el problema es más fundamental: debe cambiar el tamaño de los activos incluidos para que sean apropiados para el propósito si tiene problemas de rendimiento. Las imágenes de un tamaño adecuado también hacen que el dibujo sea significativamente más simple a la vez que se conserva la mejor calidad de imagen.

+0

Gracias Justin. Sí, esta es la razón por la que quiero la mejor manera de cargar imágenes. Mi aplicación lleva mucho tiempo mientras procesa estas imágenes. Es por eso que me preguntaba si podría mejorar mi código. – Aqueel

+0

@Aqueel Acabo de editar la respuesta para cubrir usando tamaños adecuados: eche un vistazo. – justin

+1

Justin, tu opinión ha sido realmente útil. Estaba usando alrededor de 15 imágenes de gran tamaño y las escalo antes de usar, lo cual corregiré ahora. Gracias una vez más ... – Aqueel

10
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"myimage" ofType:@"png"]; 
UIImage *image = [UIImage imageWithContentsOfFile:filePath]; 
Cuestiones relacionadas