避免在ARC下使用 CGImageRef 导致内存泄漏
程序员文章站
2022-03-02 14:36:37
...
// 高斯模糊背景图
-(void)gaositu:(UIImage*)image{
dispatch_async(dispatch_get_global_queue(0, 0), ^{
CIContext *context = [CIContext contextWithOptions:nil];
CIImage *ciImage = [CIImage imageWithCGImage:image.CGImage];
CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"];
[filter setValue:ciImage forKey:kCIInputImageKey];
[filter setValue:@40.0f forKey: @"inputRadius"];
CIImage *result = [filter valueForKey:kCIOutputImageKey];
CGImageRef outImage = [context createCGImage: result fromRect:ciImage.extent];
UIImage * blurImage = [UIImage imageWithCGImage:outImage];
CGImageRelease(outImage);//关注这句
dispatch_async(dispatch_get_main_queue(), ^{
self.mm.image = blurImage;
});
});
}
原因:
ARC does not manage C-types, of which CGImage may be considered.
You must release the ref manually when you are finished with CGImageRelease(image);
在ARC模式下 C-types的对象需要手动来进行释放 。
上一篇: Java 中会存在内存泄漏吗
下一篇: python版本切换