2012-01-08 1 views
3

를 해결하기 위해, 정적 분석기 따라서 하나의 문제가있다 : 그것은 불평엑스 코드 정적 분석은 ARC에서 하나의 누출이보고 어떻게 코드의 일부 2K 라인에서

spellDetailModalViewController *detailVC = [[spellDetailModalViewController alloc]init]; 
UIImage *tempImage = self.spellImageView.image; 
CGRect newSize = CGRectMake(0.0, 0.0, 320.0, 305.0); 
CGImageRef temp = CGImageCreateWithImageInRect([tempImage CGImage], newSize); 
UIImage *passingImage = [UIImage imageWithCGImage:temp]; 
temp=nil; 

을 그 CGImageRef '임시' '잠재적으로'유출되었으며 보유 수는 +1입니다. 이미지가 모달 ViewController에 전달 된 후이를 nil로 설정했습니다. 분명히 ARC에서는 ARC 하에서 [임시 릴리스]라고 부를 수 없습니다. 무엇을해야할지 모르겠습니다. 도움을 주시면 감사하겠습니다.

답변

4

는 당신이 필요로하는 CGImageCreateWithImageInRect 애플의 워드 프로세서 CGImageReleasetemp

CGImageRef temp = CGImageCreateWithImageInRect([tempImage CGImage], newSize); 
UIImage *passingImage = [UIImage imageWithCGImage:temp]; 
CGImageRelease(temp); 

에 : 결과 이미지는이 기능을 호출 한 후에 원본 이미지를 공개 할 수 있습니다 의미 원본 이미지에 대한 참조를 유지

.

+0

많은 @CocoaFu님께 감사드립니다. 나는 문서에서 그것을 찾을 수 없었다. 따라서 나의 질문. 나는 정말로 당신의 도움에 감사드립니다 - 건배. – Skybird

+1

@ Justin 수정 해 주셔서 감사합니다! – zaph

+0

@ 코코아 당신은 환영합니다 =) 나는 변화가 실제로 어떤 차이 (오류없이 'NULL'을 전달할 수있는 능력을 넘어서는)를 넘어서는 것인지 확실하게 기억할 수 없습니다. – justin

0

CGImageCore Graphics 개체이며 ARC는 코어 라이브러리를 처리 할 수 ​​없습니다. 따라서 CGImageRelease 또는 그 경고를 전달하는 더 좋은 방법을 사용해야합니다. imageWithCIImage 메서드를 사용하십시오.

CIImage *fooImage = [CIImage imageWithCGImage:temp.CGImage]; 
UIImage *passingImage = [UIImage imageWithCIImage:fooImage];