que - la memoria de mi iphone se llena sola
Cargando nuevas imágenes en UIImageView, no se libera la memoria de imágenes anteriores (1)
Creo que lo que quieres es usar
img = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[imgNamesArray objectAtIndex:currentImage] ofType:@"jpg"]];
para hacer su carga (porque UIImage imageNamed:
supuestamente hace algo de almacenamiento en caché que no desea), y luego agregue
[img release];
después de cada llamada a setImage
, porque las subvistas deben retain
las imágenes, por lo que está filtrando un recuento de referencias.
Pensé que la segunda versión con autorelease
habría funcionado correctamente, pero para ser sincero, las reglas de administración de la memoria de cacao aún logran confundirme incluso cuando estoy seguro de que sé lo que estoy haciendo.
Mi aplicación tiene una vista con tres UIImageViews
. Hay aproximadamente 150 imágenes como archivos de recursos, cada una un .jpg de aproximadamente 24k. La aplicación mostrará todas las imágenes, pero solo tres a la vez.
Pero cada vez que hago clic en el botón para cargar tres imágenes más en UIImageViews
, la columna "Overall Bytes" en Instruments aumenta en unos 700K, hasta que finalmente recibo una advertencia de memoria baja y luego la aplicación se cuelga. De alguna manera, la memoria que uso para cada carga de tres imágenes no se está liberando.
Busqué en Google e intenté de todas las maneras que sé hacer esto, pero no tuve éxito y necesito ayuda.
Intenté esto: (Este código es parte de la acción para cargar tres imágenes más. Las tres ImageViews son imgShownLeft
, imgShownMiddle
e imgShownRight
. Esas son variables de instancia. Primero tengo que poner currentImage
en las tres UIImageViews
, y luego poner previousImage
en la izquierda y nextImage
en la derecha:
NSString *strImageToSet = [[imgNamesArray objectAtIndex:currentImage] stringByAppendingFormat:@".jpg"];
UIImage *img = [UIImage imageNamed:strImageToSet];
[imgShownMiddle setImage:img];
[imgShownLeft setImage:img];
[imgShownRight setImage:img];
NSString *strPreviousImage = [[imgNamesArray objectAtIndex:previousImage] stringByAppendingFormat:@".jpg"];
img = [UIImage imageNamed:strPreviousImage];
[imgShownLeft setImage:img];
NSString *strNextImage = [[imgNamesArray objectAtIndex:nextImage] stringByAppendingFormat:@".jpg"];
img = [UIImage imageNamed:strNextImage];
[imgShownRight setImage:img];
Entonces probé esto: en lugar de:
UIImage *img = [UIImage imageNamed:strImageToSet];
Solía:
UIImage *img = [[UIImage alloc] initWithContentsOfFile:strImageToSet];
y asignado img
a UIImageViews
la misma manera, seguido de [img release];
Entonces probé:
UIImage *img = [[[UIImage alloc] initWithContentsOfFile:strImageToSet] autorelease];
Entonces probé:
img = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[imgNamesArray objectAtIndex:currentImage] ofType:@"jpg"]];
Pero en todos los casos, los requisitos de memoria crecieron con cada ejecución de esta acción.
Sé que es posible mantener tres imágenes cargadas a la vez sin tener 150 imágenes en la memoria. ¿Qué estoy haciendo mal?
Gracias por cualquier idea. /DAKOTA DEL SUR