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

Jon*_*sen 3 memory-leaks uiimageview uiimage ios automatic-ref-counting

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

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

如果我使用

CGImageRelease([self.imageView.image CGImage]);
Run Code Online (Sandbox Code Playgroud)

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

UIImage *image = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
CGDataProviderRelease(provider);
CFRelease(data);
Run Code Online (Sandbox Code Playgroud)

据我所知,UIImage现在拥有CGImage,我不应该释放它.因此,当我用新图像更新UIImageView时,是否确保释放UIImage?

Jon*_*sen 5

好的,我终于找到了问题所在.

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

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