ios - 使用 Core 图像过滤时内存泄漏

标签 ios xcode core-image

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

代码如下:

-(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 类的一个方法

最佳答案

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

  • 由以 allocinitcopynew 开头的方法返回的 Objective-C 对象/li>
  • 由以 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 – 您创建它,您释放它。

关于ios - 使用 Core 图像过滤时内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11222825/

相关文章:

iOS:快速向 UICollectionView 添加一个不可见的行

C++ 项目结构

iphone - Xcode 无法检测到 iOS 5.1 的 iPhone 设备

ios - iOS UI Automation 可以在没有真实设备或模拟器的情况下运行吗?

ios - UIImage 不保存到相机胶卷

swift - 无法使用 AVFoundation 将 JPEG 图像写入 HDD

ios - 在 iOS 应用程序中检查语言

ios - 线路交叉点 - GPS 坐标

ios - UIWebView 搜索文本并使用下一个按钮导航下一个出现的位置

ios - 如何在自定义 Metal Core Image Kernel 中正确处理 HDR10?