2014-03-02 9 views
3

아래의 방법을 사용하여 일부 이미지를 흐리게 만듭니다. 악기를 사용하면 CIImage가 누출됩니다. 나는 그것들을 @autoreleasepool에서 감싸려고했지만 운이 없다. 어떤 아이디어?CIImage memory leak

-(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를 nil에 넣으려고 했습니까?

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

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

     return returnImage; 
    } 
} 
+0

이전에 CIImages를 nil로 설정하려고 시도했지만 작동하지 않았습니다. 그러나 컨텍스트를 nil로 설정하면 누출을 제거하는 것처럼 보입니다. – skwashua