CIImage 内存泄漏 [英] CIImage memory leak

查看:20
本文介绍了CIImage 内存泄漏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用以下方法来模糊一些图像.使用仪器 CIImage 正在泄漏.我尝试将它们包装在 @autoreleasepool 中,但没有运气.有什么想法吗?

I'm using the below method to blur some images. Using instruments the CIImage's are leaking. I tried wrapping them in an @autoreleasepool, but no luck. Any ideas?

-(UIImage *)blurImage:(UIImage *)image withStrength:(float)strength
{
    @autoreleasepool {
        CIContext *context = [CIContext contextWithOptions:nil];
        CIImage *inputImage = [[CIImage alloc] initWithCGImage:image.CGImage];
        CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"];
        [filter setValue:inputImage forKey:@"inputImage"];
        [filter setValue:[NSNumber numberWithFloat:strength] forKey:@"inputRadius"];

        CIImage *result = [filter valueForKey:kCIOutputImageKey];
        float scale =  [[UIScreen mainScreen] scale];
        CIImage *cropped=[result imageByCroppingToRect:CGRectMake(0, 0, image.size.width*scale, image.size.height*scale)];
        CGRect extent = [cropped extent];
        CGImageRef cgImage = [context createCGImage:cropped fromRect:extent];
        UIImage *returnImage = [UIImage imageWithCGImage:cgImage].copy;

        CGImageRelease(cgImage);

        return returnImage;
    }

}

推荐答案

我看到了与您在分析代码时看到的相同的泄漏.试试这个,这似乎可以避免泄漏并为您提供相同的结果:

I see the same leak you're seeing when profiling the code. Try this instead which seems to avoid the leak and give you the same results:

- (UIImage*)blurImage:(UIImage*)image withStrength:(float)strength
{
    @autoreleasepool {
        CIImage* inputImage = [[CIImage alloc] initWithCGImage:image.CGImage];
        CIFilter* filter = [CIFilter filterWithName:@"CIGaussianBlur"];
        [filter setValue:inputImage forKey:@"inputImage"];
        [filter setValue:[NSNumber numberWithFloat:strength] forKey:@"inputRadius"];

        CIImage* result = [filter valueForKey:kCIOutputImageKey];
        float scale = [[UIScreen mainScreen] scale];
        CIImage* cropped = [result imageByCroppingToRect:CGRectMake(0, 0, image.size.width * scale, image.size.height * scale)];

        return [[UIImage alloc] initWithCIImage:cropped];
    }
}

这篇关于CIImage 内存泄漏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆