Memory Leak iOS (UIImageView,UIImage,CGImage) 未在 ARC 上释放



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

(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]);

内存将被释放。但是当我返回到上一个视图控制器时,应用程序将崩溃,因为它试图为我已经释放的图像释放分配的内存。此方法从异步任务调用,该任务使用以下方法创建图像:

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

据我了解,UIImage现在拥有CGImage,我不应该发布它。那么,当我用新图像更新UIImageView时,是否有任何方法可以确保UIImage被释放?

好的,所以我终于想出了问题所在。

正如我所说,我正在使用一些后台线程来执行映像更新,解决方案是将其添加为自动发布池,如下所示:

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

最新更新