Memory Leak iOS(UIImageView, UIImage, CGImage) no liberado en ARC
memory-leaks automatic-ref-counting (1)
Ok, así que finalmente descubrí el problema.
Como dije que estaba usando un hilo de fondo para realizar la actualización de la imagen, la solución fue agregarlo como un grupo de autorrelease de la siguiente manera:
@autoreleasepool {
[self.delegate performSelectorOnMainThread:@selector(updateImage:) withObject:[self fetchImage] waitUntilDone:NO];
}
Estoy tratando de implementar una transmisión de video simple, pero por alguna razón mi memoria no se liberará:
(void)updateImage:(UIImage *)image{
self.indicator.hidden = TRUE;
//CGImageRelease([self.imageView.image CGImage]);
self.imageView.image = nil;
self.imageView.image = image;
[self.imageView setNeedsDisplay];
}
Si uso
CGImageRelease([self.imageView.image CGImage]);
la memoria será liberada Pero cuando regrese a un controlador de vista anterior, la aplicación se bloqueará cuando intente liberar la memoria asignada para esa imagen, que ya he liberado. Este método se llama desde una tarea asíncrona que crea una imagen usando:
UIImage *image = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
CGDataProviderRelease(provider);
CFRelease(data);
Tal como lo entendí, el UIImage ahora posee el CGImage y no debería tener que liberarlo. Entonces, ¿hay alguna forma de garantizar que el UIImage se libere cuando actualicé el UIImageView con una nueva imagen?