在处理图形库,特别是一些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等较低级别的库中管理内存感到有点困惑,如果有人能告诉我一个好的思考方法,我将不胜感激。
发布于 2012-03-18 00:34:00
核心基础内存管理略有不同。不能为这些对象创建具有保留/复制功能的特性。
当你在CFObjects中使用create和copy时,你已经CFRelease它了。为了保留一些东西,会有一个方法(例如: CGPDFPageRetain(pageRef))来保留。
有关更多详细信息,请参阅this参考。
https://stackoverflow.com/questions/9751568
复制相似问题