我遇到了分配内存过多的问题。我的应用程序分配内存高达100MB!是的,我正在使用
ARC
。大部分分配的内存来自CFData
(据我所知,这是CoreImage
滤镜)。在对图像应用滤镜后,CFData
分配的内存增加了约1.3mb,并且不会被释放。
代码如下:+(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;
}
在收到内存警告后,内存使用量并不会下降,所以这不是缓存问题。