内存泄漏iOS(UIImageView,UIImage,CGImage)没有在ARC上释放

我试图实现一个简单的videostream,但由于某种原因,我的记忆将不会被释放:

(void)updateImage:(UIImage *)image{ self.indicator.hidden = TRUE; //CGImageRelease([self.imageView.image CGImage]); self.imageView.image = nil; self.imageView.image = image; [self.imageView setNeedsDisplay]; } 

如果我使用

 CGImageRelease([self.imageView.image CGImage]); 

内存将被释放。 但是,当我回到以前的视图控制器应用程序将崩溃,因为它试图释放为我已经释放的图像分配的内存。 这个方法是从asynchronous任务中调用的,它使用下面的命令创build一个图像:

 UIImage *image = [UIImage imageWithCGImage:cgImage]; CGImageRelease(cgImage); CGDataProviderRelease(provider); CFRelease(data); 

据我了解,UIImage现在拥有CGImage,我不应该释放它。 那么无论如何,当我用新的图像更新UIImageView时,确保UIImage被释放?

好,所以我终于明白了这个问题。

正如我所说我使用一些后台线程来执行图像更新,解决scheme是将其作为autorelease池添加如下:

  @autoreleasepool { [self.delegate performSelectorOnMainThread:@selector(updateImage:) withObject:[self fetchImage] waitUntilDone:NO]; }