CIImage memory leak

前端 未结 2 1968
暗喜
暗喜 2020-12-20 00:34

I\'m using the below method to blur some images. Using instruments the CIImage\'s are leaking. I tried wrapping them in an @autoreleasepool, but no luck. Any ideas?

相关标签:
2条回答
  • 2020-12-20 00:41

    did you try to put CIImages to nil ?

    -(UIImage *)blurImage:(UIImage *)image withStrength:(float)strength
    {      
           //your code
           CGImageRelease(cgImage);
    
           cropped=nil;
           result = nil;
           inputImage = nil;
           context = nil;
    
           return returnImage;
         }
     }
    
    0 讨论(0)
  • 2020-12-20 00:43

    I see the same leak you're seeing when profiling the code. Try this instead which seems to avoid the leak and give you the same results:

    - (UIImage*)blurImage:(UIImage*)image withStrength:(float)strength
    {
        @autoreleasepool {
            CIImage* inputImage = [[CIImage alloc] initWithCGImage:image.CGImage];
            CIFilter* filter = [CIFilter filterWithName:@"CIGaussianBlur"];
            [filter setValue:inputImage forKey:@"inputImage"];
            [filter setValue:[NSNumber numberWithFloat:strength] forKey:@"inputRadius"];
    
            CIImage* result = [filter valueForKey:kCIOutputImageKey];
            float scale = [[UIScreen mainScreen] scale];
            CIImage* cropped = [result imageByCroppingToRect:CGRectMake(0, 0, image.size.width * scale, image.size.height * scale)];
    
            return [[UIImage alloc] initWithCIImage:cropped];
        }
    }
    
    0 讨论(0)
提交回复
热议问题