嗨,在我的应用程序中,我有一个函数,它获取当前视图的图像并将其转换为模糊图像,然后将其添加到current.view中。尽管我从superview中使用remove删除视图,但内存仍然很高。我使用核心图形,并将所有UI图像设置为零。
我确实收到了一个内存泄漏警告

-(void)burImage
{
//Get a screen capture from the current view.
UIGraphicsBeginImageContext(CGSizeMake(320, 450));
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//Blur the image
CIImage *blurImg = [CIImage imageWithCGImage:viewImg.CGImage];
CGAffineTransform transform = CGAffineTransformIdentity;
CIFilter *clampFilter = [CIFilter filterWithName:@"CIAffineClamp"];
[clampFilter setValue:blurImg forKey:@"inputImage"];
[clampFilter setValue:[NSValue valueWithBytes:&transform objCType:@encode(CGAffineTransform)] forKey:@"inputTransform"];
CIFilter *gaussianBlurFilter = [CIFilter filterWithName: @"CIGaussianBlur"];
[gaussianBlurFilter setValue:clampFilter.outputImage forKey: @"inputImage"];
[gaussianBlurFilter setValue:[NSNumber numberWithFloat:22.0f] forKey:@"inputRadius"];
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef cgImg = [context createCGImage:gaussianBlurFilter.outputImage fromRect:[blurImg extent]];
UIImage *outputImg = [UIImage imageWithCGImage:cgImg];
//Add UIImageView to current view.
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 450)];
[imgView setTag:1109];
imgView.image = outputImg;
[imgView setTag:1108];
gaussianBlurFilter = nil;
outputImg = nil;
blurImg = nil;
viewImg = nil;
[self.view addSubview:imgView];
UIGraphicsEndImageContext();
}发布于 2013-10-01 20:15:14
静态分析器( Xcode "Product“菜单上的”Analyze“)正在通知您,您在方法的末尾丢失了所需的CGImageRelease(cgImg)。如果您有一个具有"Create“或"Copy”的方法/函数返回的Core foundation对象,那么您将负责释放它。
顺便说一下,如果你点击

图标(一旦在边距中,再在错误消息中出现的版本上),它将显示更多信息:

这可能有助于跟踪问题的根源,在本例中是对createCGImage的调用。如果您查看文档 for createCGImage,它会确认此诊断,并报告:
返回值 石英二维图像。当您不再需要时,您将负责释放返回的映像。
有关释放counsel对象的一般建议,请参阅“核心基础内存管理编程指南”中的创建规则。
https://stackoverflow.com/questions/19124503
复制相似问题