videos privados para ocultar guardar gratis fotos escanear documentos con celular calculadora aplicacion iphone objective-c performance image nsbundle

iphone - privados - La mejor manera de cargar imágenes desde el paquete de aplicaciones



icloud (4)

¿Cuál es la mejor manera de cargar imágenes desde el paquete principal de la aplicación? estoy usando

[UIImage imageNamed: "image.png"];

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

Atentamente


Para encontrar un solo archivo de recursos usando NSBundle

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

y para encontrar múltiples recursos:

NSBundle* myBundle = [NSBundle mainBundle]; NSArray* myImages = [myBundle pathsForResourcesOfType:@"jpg" inDirectory:nil];


Si desea intentar cargar las imágenes sin almacenamiento en caché, puede utilizar:

[[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 almacenarla primero en caché. Si solo necesita usar estas imágenes una vez, probablemente tenga sentido intentarlo de esta manera. El otro beneficio de hacerlo de esta manera es que no tendrá un caché de imágenes que use la memoria por más tiempo del necesario.


Si existiera una verdadera "Mejor manera", los medios para cargar imágenes de múltiples formas no existirían (a menos que sea 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:] almacena en caché la 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 del 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. Considere la imagen de un icono que utiliza en varias pantallas: ¿le gustaría que los datos de la imagen se lean y reasignen cada vez? Esto puede dar como resultado lecturas y asignaciones redundantes de datos de imagen idénticos. Si no es así, utilice los métodos de almacenamiento en caché.

Si carga la imagen solo una vez y perezosamente, entonces es posible que desee considerar enfoques de no almacenamiento en caché.

  • Los datos de imagen pueden consumir mucha memoria.
  • Leer una imagen puede llevar mucho tiempo, no solo el disco I / O, sino también convertirlo en una representación UIImage utilizable (por ejemplo, descomprimir la imagen).
  • también hay momentos en los que debe cambiar el tamaño / escala de una imagen. entonces querrías una copia a escala.

En resumen, existen muchas consideraciones, pero si tiene activos escalados adecuadamente que reutiliza, 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 agrupados para que sean apropiados para el propósito si tiene problemas de rendimiento. Las imágenes del tamaño adecuado también hacen que el dibujo sea mucho más sencillo, al tiempo que conserva la mejor calidad de imagen.


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