iphone - 核心图形库中的内存管理

标签 iphone ios cocoa-touch core-graphics core-text

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

1)我应该将其视为原语并执行@property(nonatomic)吗?或者我根本不应该将其声明为属性(property)?

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 等较低级别库管理内存有点困惑,如果有人能告诉我一种思考它的好方法,我将不胜感激。

最佳答案

核心基础内存管理有点不同。您不会为这些对象创建带有保留/复制的属性。

当您使用 CFObjects 创建和复制时,您就拥有了 CFRelease。要保留东西,会有一个方法(例如:CGPDFPageRetain(pageRef))来保留。

this引用更多详细信息。

关于iphone - 核心图形库中的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9751568/

相关文章:

iphone - 如何使用 iOS 制作简单的 EQ AudioUnit(低音、中音、高音)?

ios - 如何在qemu上安装Apple iOS

ios - 在 Interface Builder 中使用自定义字体设计标签/ TextView

ios - 在 viewController 关闭时调用的函数(当应用程序退出时)?

ios - 在 ios 中创建自定义控件

iphone - 使用 AV Foundation 时旋转 AV 视频预览区域和其他元素

iphone - 应用程序在设备上崩溃,但 XCode 未记录崩溃

iphone - UIWebview xml 文件

ios - 如何在 MobileVLCKit 中设置循环视频?

cocoa-touch - UIDocumentInteractionController presentOpenInMenuFromBarButtonItem 在 iOS8.1 上停止工作