【发布时间】:2014-10-09 14:23:04
【问题描述】:
我知道之前有人问过这个问题,但似乎没有任何效果。
我有一个使用CIImage 和CGIImage 返回过滤图像的静态方法,我使用RayWenderlich.com 上的示例并将其更改为返回UIImage,而不是直接将其设置为UIImageView。
我的问题是CGImageRef cgimg 永远不会被释放。这会导致相当快的内存泄漏。我做错了什么?
+ (UIImage *)image:(UIImage *)image withFilterName:(NSString *)filterName
{
if (!image)
return nil;
@autoreleasepool {
CIImage *beginImage = [[CIImage alloc] initWithCGImage:image.CGImage];
CIContext *context = [CIContext contextWithOptions:nil];
CIFilter *filter = [CIFilter filterWithName:@"CIPhotoEffectProcess"]
[filter setValue:beginImage forKey:kCIInputImageKey];
CIImage *outputImage = [filter outputImage];
CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *newImage = [UIImage imageWithCGImage:cgimg];
CGImageRelease(cgimg);
return newImage;
}
}
【问题讨论】:
-
我只是在这里猜测,但因为 CGImageRef 不是 NSObject 的子类(因此没有
retain和release选择器),我很确定 ARC 没有算了。 -
我没有发现您发布的代码有任何问题。你用
newImage做什么?
标签: ios objective-c automatic-ref-counting core-image