CGImageRef未在ARC下发布

时间:2014-10-09 14:23:04

标签: ios objective-c automatic-ref-counting core-image

我知道之前已经问过这个问题,但似乎没有任何效果。

我有一个使用CIImageCGIImage返回已过滤图像的静态方法,我使用了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;
    }
}

2 个答案:

答案 0 :(得分:1)

看起来cgimg正在发布。我假设你的意思是CGImage没有被释放。你不会指望它,因为你将它传递给UIImage,这可能会保留它。

最有可能你后来泄漏了UIImage(或者当你没有意思到这一点时保持它,这类似于泄漏)。我会审核您使用的代码并发布UIImage,而CGImageRef可能会自行处理。

答案 1 :(得分:0)

尝试这种方式....

{
"_source": {
        "includes": ['user.screen_name','entities.hashtags.text']            
        "excludes": ['retweeted', ]
},
"query":{
    "match_all":{}