Problemas de memoria y soluciones de optimización en el desarrollo de iOS
1. El recurso al que se refiere inageWithContentsFile: el método de gestión de imágenes utilizado para crear imágenes
2.ImageAssets Se refiere al uso; imageNamed Métodos de administración para crear imágenes;
Procesamiento de memoria de imágenes de UI:
Realmente, en el desarrollo de aplicaciones, los métodos comúnmente utilizados no son más que 1 y 2.
Ventajas y desventajas de 1:
Uso de 1: ns string * path = [[paquete principal del paquete ns] pathforresource: @"image @2x" tipo: @"png" ] ;
imagen ui * imagen =[imagen ui imagewithcontentsofile: ruta];
1: (tipo de instancia) imagewithcontentsofile: (cadena ns *) nombre de archivo {
nsinteger scale = 0;
{
scale = 2; //Esta parte es para extraer el número después del símbolo @ en el nombre del archivo, que es 1 si existe.
}
return[[self alloc]initWithData:[ns data datawithcontentsofile:fileName scale:scale];
}
Usar Este enfoque tiene una limitación. Esta imagen debe estar ubicada en el directorio raíz de . ipa o caja de arena. El directorio raíz es para arrastrar los archivos de imágenes al proyecto, y las imágenes en la zona de pruebas se escriben o guardan;
Características de 1: en el modo de administración de imágenes de 1, todas las imágenes se leen leyendo archivos Datos creados. Leer los datos del archivo una vez generará un NSData y un UIImage. Cuando se crea una imagen, el NSData correspondiente se destruirá. Cuando el recuento de referencia de UIImage llegue a 0, UIImage se destruirá automáticamente para garantizar que la imagen no exista en la memoria durante mucho tiempo.
Escenario de uso de 1: debido a las características de este método, el método 1 generalmente se usa cuando los datos de la imagen son muy grandes y la imagen generalmente no necesita usarse varias veces, como el fondo de la página de inicio (imagen de pantalla completa). A veces aparece después de ejecutar la APLICACIÓN, a veces no se usa en absoluto.
Ventajas 1: Puede gestionar el ciclo de vida de una imagen. Cuando un cuadro es necesario, se crea, y cuando no se necesita, se destruye. Las imágenes no se almacenan en la memoria durante largos períodos de tiempo, por lo que no se desperdicia memoria. En términos de reducir la huella de memoria de imágenes grandes, 1 es la primera opción.
Método 2: La intención original de 2 es principalmente resolver el problema de adaptación automática de pantallas Leitian y pantallas que no son Thunderfield, es decir, resolver el problema de adaptación de pantalla de iPhone4, iPhone3GS y anteriores. modelos. Aunque no hay 3GS, sale el plus y requiere 3x.
2 Uso: ui image * image = [ui image imagenname: @"image"]
Características de 2: similar a 1, 2 también lee imágenes de datos de archivos de imagen y conviértalo a UIImage, pero estas imágenes están empaquetadas en 2, la mayor diferencia es que las imágenes están almacenadas en caché. Equivalente a un diccionario, la clave es el nombre de la imagen y el valor es el objeto de la imagen. Cuando se llama al método imageNamed:, primero se obtiene de este diccionario. Si lo tomaste, simplemente devuélvelo. Si no puedes casarlo, créalo en un archivo y guárdalo en este diccionario. Debido a que las claves y los valores del diccionario son referencias sólidas, una vez creada, la imagen nunca se destruirá.
2: (tipo de instancia) imagenname: (ns string *) imagenname {
If (!imageName)
Devuelve cero;
}
imagen de interfaz de usuario * imagen = self . mejora de imagen[nombre de imagen];
if (imagen) {
devolver imagen;
}
NSString *path = @"ruta de la imagen";
image =[imagen de la interfaz de usuario llamada:];
if (imagen) { p>
p>
self .imagen buff【imageName】= imagen;
}
Devolver imagen
}
(NSMutableDictionary *) mejora de imagen {
static NSMutableDictionary *_image buff;
static despacho_once_t onceToken
dispatch_once(amp;onceToken,^{ p>
_ image buff =【[NSMutableDictionary alloc】init];
}
return _ imageBuff
}
2 Escenarios de uso: el escenario de uso más importante son las imágenes de íconos. Generalmente, el tamaño de las imágenes de íconos varía de 3 kb a 20 kb y todos son archivos pequeños.
Ventaja 2: cuando un ícono debe mostrarse en varios lugares, su objeto UIImage correspondiente solo se creará una vez y los íconos en varios lugares usarán un objeto UIImage, lo que reduce la operación de lectura del sandbox.