UIImageView Animation demasiado consumo de memory

Tengo un problema con la memory y las imágenes que estoy animando. Primero lo primero, estoy usando ARC. En mi pantalla inicial tengo alnetworkingedor de 60 imágenes para animar. Estoy usando este código para la animation:

NSMutableArray *images = [[NSMutableArray alloc] init]; int animationImageCount = 61; for (int i = 1; i < animationImageCount; i++) { [images addObject:[UIImage imageNamed:[NSString stringWithFormat:@"s-%d", i]]]; } self.fullAnimatedImage = [UIImage imageNamed:[NSString stringWithFormat:@"s-%d", animationImageCount - 1]]; self.animatedImageView.image = self.fullAnimatedImage; self.animatedImageView.animationImages = [NSArray arrayWithArray:images]; self.animatedImageView.animationDuration = images.count/30; self.animatedImageView.animationRepeatCount = 1; [self.animatedImageView startAnimating]; // since there is no official callback method when UIImageView animation completes, // we can just call a method after animation time has passed [self performSelector:@selector(animationFinished) withObject:nil afterDelay:self.animatedImageView.animationDuration]; 

El problema es que el consumo de memory es de unos 300 MB y, por supuesto, se bloquea en el iPhone 4. Cuando comento esa parte del código, el consumo de memory es de unos 40 MB, eso está bien. He intentado configurar la propiedad de la image en cero y nada. He intentado ponerlo en @autoreleasepool {} pero no libera su contenido. ¿Tienes alguna idea de cómo optimizar esto?

Debe intentar replace [UIImage imageNamed:] con [UIImage imageWithContentsOfFile:] .

De los documentos:

Si tiene un file de image que solo se mostrará una vez y desea asegurarse de que no se agregue al caching del sistema, debería crear su image usando imageWithContentsOfFile :. Esto mantendrá su image de uso único fuera del caching de imágenes del sistema, lo que podría mejorar las características de uso de memory de su aplicación.

¿Qué tan grande es cada image que está cargando (en cuanto a píxeles y tamaño de file)?

Su mejor opción es optimizar las imágenes para networkingucir el tamaño de sus files / requisitos de memory. Intenta usar jpg en lugar de png si aún no lo has hecho. Si forman parte de una secuencia de video, puede networkingucir su calidad de forma segura sin tener que imitar la calidad percibida.

Entonces, después de un período de time, decidí ir de otra manera. De 60 imágenes, he creado 10 imágenes. No tengo todas las imágenes para cada object, sino una image para todos los objects. Por ejemplo, si tiene 3 carros, e image para cada auto, y otras n imágenes para mover cada tres puntos hacia la izquierda, esa es ahora una image para los tres autos. Para los mismos objects, he creado una image completa. Después de eso, he creado una vista de image para cada image. Necesitaba saber para cada image cuál era la position final del object de image. Por ejemplo, el auto va de derecha a izquierda. Así que he colocado esa image con todos mis autos a la derecha, fuera de los límites de la vista. Y esa es la lógica para cada otra image. Después de eso, acabo de animar la position UIImageViews. Espero que esto ayude a alguien.

El problema en su código es con el enfoque básico. Simplemente no puede mantener todas las imágenes decodificadas en la memory al mismo time. Escribí una publicación de blog específica sobre este tema que puedes leer aquí . La solución es utilizar un enfoque diferente, de modo que solo mantenga 1 cuadro de datos de image desencryptions en la memory a la vez. Eso significa que los cuadros de datos deben cargarse dinámicamente según sea necesario.