首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >核心图形库中的内存管理

核心图形库中的内存管理
EN

Stack Overflow用户
提问于 2012-03-18 00:15:27
回答 1查看 1.2K关注 0票数 0

在处理图形库,特别是一些CoreText对象时,我对如何处理内存管理有点困惑。例如,我想为一个CTFontRef创建一个属性,但是我真的不确定我应该如何声明它。

1)我是不是应该把它当做一个原语来做@property(nonatomic)?或者我根本不应该将它声明为一个属性?

2)我假设当我完成CFRelease(myFont)时,我必须在dealloc中执行它?我如何正确地释放它

3)在下面的方法中,我的处理是否正确?返回CTFontRef,但不会自动释放。我需要担心这个吗?

代码语言:javascript
复制
- (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等较低级别的库中管理内存感到有点困惑,如果有人能告诉我一个好的思考方法,我将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-18 00:34:00

核心基础内存管理略有不同。不能为这些对象创建具有保留/复制功能的特性。

当你在CFObjects中使用create和copy时,你已经CFRelease它了。为了保留一些东西,会有一个方法(例如: CGPDFPageRetain(pageRef))来保留。

有关更多详细信息,请参阅this参考。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9751568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档