tiene sola que pero otros memoria mas llena liberar gratis espacio cómo compre comprar como borrar apartado aparece iphone uiimageview uiimage instruments

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