使用Core Image过滤器时爬升CFData内存使用情况

时间:2012-11-30 13:50:45

标签: iphone automatic-ref-counting dealloc core-image cfdata

我遇到分配内存过多的问题。我的app alloc mem达到了100MB! 是的...我正在使用ARC。分配的大部分内存是CFData(据我所知,它是CoreImage过滤器)。在对图像应用过滤器后,CFData分配的内存增加了~1.3mb并且没有释放:

Instruments showing the memory usage

代码如下所示:

+(UIImage*)BWFilter:(UIImage *)imgFX
{
    CIImage *sourceImage = [[CIImage alloc] initWithImage:imgFX];

    CIImage *blackAndWhite = [CIFilter filterWithName:@"CIColorControls" keysAndValues:kCIInputImageKey, sourceImage, @"inputBrightness", [NSNumber numberWithFloat:0.0], @"inputContrast", [NSNumber numberWithFloat:1.1], @"inputSaturation", [NSNumber numberWithFloat:0.0], nil].outputImage;
    CIImage *output = [CIFilter filterWithName:@"CIExposureAdjust" keysAndValues:kCIInputImageKey, blackAndWhite, @"inputEV", [NSNumber numberWithFloat:0.7], nil].outputImage;

    CIContext *context = [CIContext contextWithOptions:nil];
    CGImageRef cgiimage = [context createCGImage:output fromRect:output.extent];
    imgFX = [UIImage imageWithCGImage:cgiimage];

    if (cgiimage) {
        CGImageRelease(cgiimage);
    }

    return imgFX;
}

内存警告后内存使用量不会下降,因此不应该是缓存问题。

1 个答案:

答案 0 :(得分:0)

我在示例项目(使用ARC)上运行您的代码,它不会泄漏任何泄漏或额外分配。 CFData基本上与CIFilter子类无关,而与CIImage有关。问题出在其他地方。