Objective c 应用CIFilters时如何控制内存使用?

Objective c 应用CIFilters时如何控制内存使用?,objective-c,memory-management,core-image,cifilter,ciimage,Objective C,Memory Management,Core Image,Cifilter,Ciimage,当我将CIFilters应用于图像时,内存使用量不断增加,我不知道该怎么办。 我已经尽了我所能: 使用@autoreleasepool: - (UIImage *)applySepiaToneTo:(UIImage *)img //Sepia { @autoreleasepool { CIImage *ciimageToFilter = [CIImage imageWithCGImage:img.CGImage]; CIFilter *sepia

当我将CIFilters应用于图像时,内存使用量不断增加,我不知道该怎么办。 我已经尽了我所能:

使用@autoreleasepool:

- (UIImage *)applySepiaToneTo:(UIImage *)img //Sepia
{
    @autoreleasepool
    {
        CIImage *ciimageToFilter = [CIImage imageWithCGImage:img.CGImage];
        CIFilter *sepia = [CIFilter filterWithName:@"CISepiaTone"
                                     keysAndValues: kCIInputImageKey, ciimageToFilter,
                                                    @"inputIntensity", @1.0, nil];

        return [self retrieveFilteredImageWithFilter:sepia];
    }
}

- (UIImage *)retrieveFilteredImageWithFilter:(CIFilter *)filtro
{
    @autoreleasepool
    {
        CIImage *ciimageFiltered = [filtro outputImage];

        CGImageRef cgimg = [_context createCGImage:ciimageFiltered
                                          fromRect:[ciimageFiltered extent]];

        UIImage *filteredImage = [UIImage imageWithCGImage:cgimg];

        CGImageRelease(cgimg);

        return filteredImage;
    }
}
我还缩小了要过滤的图像,并在背景线程中进行过滤:

- (void)filterWasSelected:(NSNotification *)notification
{
    self.darkeningView.alpha = 0.5;
    self.darkeningView.userInteractionEnabled = YES;
    [self.view bringSubviewToFront:self.darkeningView];
    [self.activityIndic startAnimating];
    [self.view bringSubviewToFront:self.activityIndic];

    int indice = [notification.object intValue];
    __block NSArray *returnObj;
    __block UIImage *auxUiimage;

    if(choosenImage.size.width == 1280 || choosenImage.size.height == 1280)
    {
        UIImageView *iv;
        if(choosenImage.size.width >= choosenImage.size.height)
        {
            float altura = (320 * choosenImage.size.height)/choosenImage.size.width;
            iv = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,320,altura)];
            iv.image = choosenImage;
        }
        else
        {
            float largura = (choosenImage.size.width * 320)/choosenImage.size.height;
            iv = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,largura,320)];
            iv.image = choosenImage;
        }

        UIGraphicsBeginImageContextWithOptions(iv.bounds.size, YES, 0.0);
        [iv.layer renderInContext:UIGraphicsGetCurrentContext()];
        auxUiimage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    }
    else
        auxUiimage = choosenImage;

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{

        if(artisticCollection)
            returnObj = [self.filterCoordinator setupFilterArtisticType:indice toImage:auxUiimage];
        else
            returnObj = [self.filterCoordinator setupFilterOldOrVintageType:indice toImage:auxUiimage];

        dispatch_async(dispatch_get_main_queue(), ^{

            self.darkeningView.alpha = 0.3;
            self.darkeningView.userInteractionEnabled = NO;
            [self.activityIndic stopAnimating];
            [self.view bringSubviewToFront:stageBackground];
            [self.view bringSubviewToFront:stage];
            [self.view bringSubviewToFront:self.filtersContainerView];
            [self.view bringSubviewToFront:self.framesContainerView];
            [self.view bringSubviewToFront:self.colorsContainerView];

            if(returnObj)
            {
                auxUiimage = [returnObj firstObject];

                NSLog(@"filtered image width = %f and height = %f", auxUiimage.size.width, auxUiimage.size.height);

                returnObj = nil;
                choosenImageContainer.image = auxUiimage;
            }
        });
    });
}
我还尝试使用contextWithEagleContext方法创建上下文,但没有任何更改。 我做了很多研究,包括堆栈溢出,但什么也没发现

在我将图像放入图像视图(图像来自相册)之前,我只使用23兆的内存,当我应用过滤器时,使用量会跳到51兆,不会下降。如果我继续应用其他过滤器,内存使用量只会增加

我的应用程序中没有链接,我已签入仪器。 另外,我已经检查过,bringSubviewToFront方法也不负责任。 它是在创建CIImage之后再创建CIFilter对象。 我知道在应用过滤器的过程中,数据被加载到内存中,但是应用过滤器后如何清理内存

有什么我不知道的秘密吗??请帮忙