2014-03-02 43 views
3

我正在使用下面的方法來模糊一些圖像。使用儀器CIImage泄漏。我試圖用@autoreleasepool包裝它們,但沒有運氣。有任何想法嗎?CIImage內存泄漏

-(UIImage *)blurImage:(UIImage *)image withStrength:(float)strength 
{ 
    @autoreleasepool { 
     CIContext *context = [CIContext contextWithOptions:nil]; 
     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)]; 
     CGRect extent = [cropped extent]; 
     CGImageRef cgImage = [context createCGImage:cropped fromRect:extent]; 
     UIImage *returnImage = [UIImage imageWithCGImage:cgImage].copy; 

     CGImageRelease(cgImage); 

     return returnImage; 
    } 

} 

回答

7

我在分析代碼時看到了同樣的泄漏。試試這個,而不是似乎避免泄漏,並給你相同的結果:

- (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

您是否嘗試將CIImages置零?

-(UIImage *)blurImage:(UIImage *)image withStrength:(float)strength 
{  
     //your code 
     CGImageRelease(cgImage); 

     cropped=nil; 
     result = nil; 
     inputImage = nil; 
     context = nil; 

     return returnImage; 
    } 
} 
+0

我以前曾嘗試將CIImages設置爲零,並沒有工作。然而,看起來設置上下文爲零似乎消除了泄漏。 – skwashua