2009-08-12 4 views
3

나는 여러 가지 방법을 통과하고있어 (이 CG 객체이기 때문에, 나는 그것이 오토 릴리즈를 지원하지 않는 가정) CGImageRef와 적절한 메모리 관리를 수행하고있어 만약 내가 궁금 하군요. 비 NSObject를 사용한 메모리 관리와 다른 NSObject와의 상호 작용은 아직 다소 새로운 것입니다. 내가 뭘하는지 여기해제의 CGImage (CGImageRef)

:

내가 CGBitmapContextCreateImage 내 이미지 캐시 관리자 (계수 1을 유지) 내부의 CGImageRef를 생성하고, NSMutableDictionary (계수 2를 유지)에 추가하고있다. CALayers 이미지를 사용할 때

, 난 층을 제거하기 전에 = 무기 호 (카운트 -1 유지) layer.contents (+1 카운트를 유지)를 할당하고, layer.contents와 내용을 클리어. 텍스처를 삭제하면

마지막으로, 나는 전화 CGImageRefRelease와 [NSMutableDictionary removeObject]

이 그렇게 할 수있는 적절한 방법입니다 0으로 카운트를 유지해야 하는가? 당신이 설명

답변

16

Core Foundation objects (which all Core Graphics objects are) do support autorelease.

단계는 잘 작동 및 누설 또는 오브젝트를 과도하게 방출하지 않아야합니다.

저는 CGImageRelease과 같은 특정 클래스 릴리스 기능 대신 CFRelease을 사용하지만 순전히 스타일의 문제로 사용합니다. CGImageRelease 검사를 NULL를 들어, NULL을 통과 할 때 CFRelease 충돌하는 반면 : 난 그냥 NULL 조심해야합니다. CGImageRelease과 형제를 사용하면 걱정할 필요가 없습니다.

나는 removeObject:forKey:이 아닌 removeObject이 아니라고 가정합니다 (존재하지 않으며 어쨌든 개체를 지정하지 않아도됩니다).

+0

링크를 제공해 주셔서 감사합니다. 훌륭한 리소스가 많은 것을 분명히합니다. 문서 도구는 이미지가 NULL 인 경우 CGImageRelease 그렇게 함께 갈 안전한 소리, 오류가 발생하지 않습니다 언급했다. removeObject : forKey :, 예, 그 중 하나입니다. – Rudi

+0

** 링크 한 문서가 귀하의 주장을 뒷받침하지 않습니다 ** 일부 핵심 재단 객체는 Cocoa 클래스에 "수신자 부담 브리지"이지만 모든 것이 아닙니다. 'CFStringRef'를'NSString *'으로 캐스팅 할 수는 있지만'CGImageRef'와'UIImage'로는 할 수 없습니다. – benzado

+0

필자의 주장은 CF 객체가'release'와'autorelease'를 지원한다는 것입니다. 이 문서는 명시 적으로 다음과 같이 명시하고 있습니다 : "예제에서 메모리 관리 함수와 메소드는 상호 교환 가능합니다. 여러분은 Cocoa 객체로'CFRelease'를 사용하고 Core Foundation 객체로'release'와'autorelease'를 사용할 수 있습니다." 의 CGImage 참조가의 CGImage가 CFType에서 내려 것을 말한다. http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Reference/CGImage/는 –

관련 문제