我试图实现一个简单的视频流但由于某种原因我的内存不会被释放:
(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?
答案 0 :(得分:5)
好的,所以我终于找到了问题。
正如我所说我使用一些后台线程来执行图像更新,解决方案是将其添加为自动释放池,如下所示:
@autoreleasepool {
[self.delegate performSelectorOnMainThread:@selector(updateImage:) withObject:[self fetchImage] waitUntilDone:NO];
}