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

2024-04-18

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

(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];
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARC 上未释放内存泄漏 iOS(UIImageView、UIImage、CGImage) 的相关文章

随机推荐