2012-03-17 3 views
0

그래픽 라이브러리를 처리 할 때 메모리 관리를 처리하는 방법, 특히 CoreText 오브젝트를 처리하는 방법에 대해 약간 혼란 스럽습니다. 예를 들어, CTFontRef에 대한 속성을 만들고 싶지만 실제로 어떻게 선언해야할지 잘 모르겠습니다.코어 그래픽 라이브러리의 메모리 관리

1) 프리미티브처럼 처리해야합니까? @property(nonatomic)? 아니면 재산으로 선언하지 않아야합니까?

2) 내가 처리 할 때 dealloc에서 CFRelease(myFont)을 수행해야한다고 가정합니다. 어떻게 적절하게 해제합니까?

3) 아래의 방법으로 올바르게 처리합니까? CTFontRef이 리턴되었지만 자동 릴리스되지 않았습니다. 나는 이것에 대해 걱정할 필요가 있습니까? 전체

- (CTFontRef) loadCustomFontWithName:(NSString *)fontName ofType:(NSString *)type attributes:(NSDictionary *)attributes 
{ 
    NSString *fontPath = [[NSBundle mainBundle] pathForResource:fontName ofType:type]; 

    NSData *data = [[NSData alloc] initWithContentsOfFile:fontPath]; 
    CGDataProviderRef fontProvider = CGDataProviderCreateWithCFData((CFDataRef)data); 
    [data release]; 

    CGFontRef cgFont = CGFontCreateWithDataProvider(fontProvider); 
    CGDataProviderRelease(fontProvider); 

    CTFontDescriptorRef fontDescriptor = CTFontDescriptorCreateWithAttributes((CFDictionaryRef)attributes); 
    CTFontRef font = CTFontCreateWithGraphicsFont(cgFont, 0, NULL, fontDescriptor); 

    CFRelease(fontDescriptor); 
    CGFontRelease(cgFont); 

    return font; 
} 

,있는 CoreGraphics 또는 CoreText 같은 낮은 수준의 라이브러리에서 메모리를 관리하는 방법에 대해 생각하는 누군가가 나에게 그것에 대해 생각하는 좋은 방법을 말할 수 있다면 감사하겠습니다 방법에 조금 혼란.

답변

1

핵심 기초 메모리 관리가 약간 다릅니다. 해당 객체에 대한 retain/copy가있는 속성을 만들지 마십시오.

CFObject를 사용하여 만들기 및 복사를 사용하면 언제든지 CFRelease가 있습니다. 일을 유지하기 위해 유지할 메소드 (예 : CGPDFPageRetain (pageRef))가 있습니다.

자세한 내용은 this을 참조하십시오.