避免在ARC下使用 CGImageRef 导致内存泄漏

// 高斯模糊背景图
-(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的对象需要手动来进行释放 。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容