Я немного запутался в том, как обращаться с управлением памятью при работе с графическими библиотеками, особенно с некоторыми CoreText
объектами. Например, я хочу создать свойство для CTFontRef
, но на самом деле совсем не уверен, как мне его объявить.
1) Должен ли я относиться к этому как к примитиву и делать @property(nonatomic)
? Или я не должен объявлять это как собственность вообще?
2) Я предполагаю, что мне нужно сделать CFRelease(myFont)
в dealloc, когда я закончу с этим? Как мне правильно его отпустить
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, и был бы признателен, если бы кто-нибудь подскажет мне хороший способ думать об этом.