2014-03-27 4 views
1

sublayer이라는 CALayer 객체가 있습니다. 내보기 컨트롤러의 헤더 파일에 속성을 만들었 기 때문에 내보기 컨트롤러 전체에서 self.sublayer으로 사용합니다.CALayer의 contents 속성에 포함 된 CGImage를 해제해야합니다.

self.subLayer.contents = (id)[UIImage imageWithCGImage:imageRef].CGImage; 

은 그때 지금은 하위 계층을 만드는 데 사용 된 것을 바로 imageRef 객체를 해제 :

은 내가 CGImageRef 객체가 imageRef라고 사용하여 생성되는 UIImage 객체에 동일 계층의 내용의 속성을 설정 더 이상 필요하지 않습니다.

CGImageRelease(imageRef); 

그러나 여기에 무엇이 나를 괴롭 히고 있습니다. 나중에 코드에서 더 이상 self.sublayer.contents이 필요하며 제대로 포함 된 CGImage을 릴리스하고 싶습니다. 내가 self.sublayer.contents NSLog 경우

는 콘솔에이 인쇄됩니다 :

<CGImage 0x146537c0> 그래서 나는이 CGImage뿐만 아니라 해제 할 수 있어야합니다.

은 내가 CGImage을 해제하려면이 옵션을 사용하려고했으나 NSLog는 여전히 콘솔에 같은 출력 :이 사용하는 경우
CGImageRelease((__bridge CGImageRef)(self.subLayer.contents));

에서, NSLog가 (null)으로 콘솔에 인쇄됩니다,하지만 난 걱정 이 기술적으로 공개되지 않는 CGImage :

self.subLayer.contents = nil; 

제대로 CGImage을 해제하거나 내가 t에 수정이다 nil에 하위 계층의 내용 속성을 설정 하는가 기술적으로는 CGImage을 공개하지 않는다고 생각하니?

지금 내 앱에 메모리 문제가 발생하므로이 코드를 CGImage에 올바르게 출시해야합니다.

+0

'하위 레이어 '는보기의 레이어입니까? –

+0

이것은 하위 레이어를 설정하는 방법입니다. self.subLayer = [CALayer layer]; – user3344977

답변

1

CALayercontents 속성은 세터 구현 있다는 의미하는 고정 속성입니다 더 많거나이 수행 적은 : 당신은 새로운 내용과 nil를 설정할 때, 그래서

- (void)setContents:(id)contents 
{ 
    if (contents == _contents) return; // Same as existing value 
    [_contents release]; 
    _contents = [contents retain]; 
} 

, 이전 내용 입니다이 출시되었습니다.

+0

답변 해 주셔서 감사합니다.하지만 저는 조금 실망합니다. 나는 기억 문제를 일으키는 것을 마침내 발견했다고 생각했다. 오 잘. – user3344977