2014-10-09 4 views
0

이 질문은 이전에 물어 보았지만 아무 것도 작동하지 않는 것으로 알고 있습니다. ARC에서 CGImageRef가 공개되지 않음

내가 CIImageCGIImage를 사용하여 필터링 된 이미지를 돌려 고정 방법이, I는 RayWenderlich.com의 예를 사용하고있는 UIImageView에 직접 설정하는 대신있는 UIImage 반환을 바꿨다.

내 문제는 CGImageRef cgimg이 출시되지 않는다는 것입니다. 어느 정도 빠른 메모리 누수가 발생합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+ (UIImage *)image:(UIImage *)image withFilterName:(NSString *)filterName 
{ 
    if (!image) 
     return nil; 


    @autoreleasepool { 
     CIImage *beginImage = [[CIImage alloc] initWithCGImage:image.CGImage]; 

     CIContext *context = [CIContext contextWithOptions:nil]; 

     CIFilter *filter = [CIFilter filterWithName:@"CIPhotoEffectProcess"] 
     [filter setValue:beginImage forKey:kCIInputImageKey]; 

     CIImage *outputImage = [filter outputImage]; 

     CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; 

     UIImage *newImage = [UIImage imageWithCGImage:cgimg]; 

     CGImageRelease(cgimg); 

     return newImage; 
    } 
} 
+0

CGImageRef는 NSObject의 하위 클래스가 아니기 때문에 (따라서 '선택자'와 '릴리즈'선택자가 없습니다), ARC가 계산하지 않을 것이라고 확신합니다. –

+1

게시 한 코드에 아무런 문제가 보이지 않습니다. 'newImage'로 무엇을합니까? –

답변

0

cgimg이 출시 중입니다. CGImage이 할당 해제되지 않았다고 가정합니다. 당신은 그것이 그것을 유지하는 UIImage에 그것을 통과하기 때문에 그것을 기대하지 않을 것입니다.

대부분의 경우 나중에 UIImage이 누출 될 수 있습니다 (또는 누출과 유사하지 않을 때 주위에 두십시오). UIImage을 사용하고 출시하는 코드를 감사 하겠으며 CGImageRef은 자체 처리에 도움이 될 것입니다.