【问题标题】:Memory leak when filtering with Core image使用 Core 图像过滤时的内存泄漏
【发布时间】:2012-06-28 16:26:55
【问题描述】:

所以我一直在使用核心图像对图像应用过滤器,一切都很好,除了当我尝试一遍又一遍地应用相同的过滤器时,应用程序就退出了,我猜这是内存泄漏。

代码如下:

-(UIImage *) applyFilter: (UIImage*) picture
{

    UIImageOrientation originalOrientation = picture.imageOrientation;
    CGFloat originalScale = picture.scale;   


    CIImage *beginImage = [CIImage imageWithCGImage:picture.CGImage];  


    CIContext *context = [CIContext contextWithOptions:nil];

    CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone" 
                                  keysAndValues: kCIInputImageKey, beginImage, 
                        @"inputIntensity", [NSNumber numberWithFloat:0.8], nil];

    CIImage *outputImage = [filter outputImage];

    CGImageRef cgimg = 
    [context createCGImage:outputImage fromRect:[outputImage extent]];
    UIImage *newImg = [UIImage imageWithCGImage:cgimg scale:originalScale orientation:originalOrientation];

    beginImage = nil;
    context = nil;
    filter = nil;
    outputImage = nil;
    cgimg = nil;
    [beginImage release];
    [context release];
    [filter release];
    [outputImage release];
    //CGImageRelease(CGImageRef) method.
    CGImageRelease(cgimg);

    return newImg;
}

而过滤我只是这样做

UIImage *ima = [self.filter applyFilter:self.imageView.image];
imageView.image = ima ;

applyFilter是我自己创建的Filter类的一个方法

【问题讨论】:

    标签: ios xcode core-image


    【解决方案1】:

    在调用 release 之前将变量设置为 nil,因此 release 无效。但是无论如何,您都不应该发布大部分内容。你只需要释放你创建的对象(我希望下面的列表是完整的):

    • 由以allocinitcopynew 开头的方法返回的 Objective-C 对象
    • 由以create 开头的Objective-C 方法或包含CreateCopy 的函数返回的基础对象。

    删除这些行应该没问题:

    beginImage = nil;
    context = nil;
    filter = nil;
    outputImage = nil;
    cgimg = nil;
    [beginImage release];
    [context release];
    [filter release];
    [outputImage release];
    

    您需要保留CGImageRelease(cgimg); 这一行,因为用于获取cgimg 的方法包含create——您创建它,然后释放它。

    【讨论】:

    • 嗨@Meenakshi,你应该分享对你不起作用的代码吗?你使用 ARC 吗?
    • 嗨,是的,我正在使用 ARC,我已经添加了问题,链接是 stackoverflow.com/questions/23628783/memory-leak-for-coreimage 这里我添加了代码。
    • @Tammo Freese 你能检查一下代码,请告诉我我应该在代码中做错什么吗?
    猜你喜欢
    • 1970-01-01
    • 2017-07-05
    • 2013-05-10
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    相关资源
    最近更新 更多