欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

避免在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的对象需要手动来进行释放 。

相关标签: 内存泄漏