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

你可能感兴趣的:(避免在ARC下使用 CGImageRef 导致内存泄漏)