iphone - 使用返回值管理 CoreGraphics/CoreText 中的内存

标签 iphone ios cocoa-touch core-graphics

我有一个简单的方法,它接受一个 CTFramesetterRef 对象并从中构建一个 CTTextFrameRef,如下所示:

- (CTFrameRef) createFrameRefWithFramesetterRef:(CTFramesetterRef)framesetterRef
{
    CTFrameRef frameRef = CTFramesetterCreateFrame(framesetterRef, CFRangeMake(0, 0), self.mutablePathRef, NULL);
    return frameRef;
}

然后在另一种方法中调用上述方法:

- (void) someMethod
{
     CTFramesetterRef framesetterRef = CTFramesetterCreateWithAttributedString((CFMutableAttributedStringRef)self.text);
     CTFrameRef newFrameRef = [self createFrameRefWithFramesetterRef:framesetterRef];
     //do some stuff
     CTRelease(newFrameRef);
     CTRelease(framesetterRef);
}

我只是想验证我是否在此处正确管理内存,因为我是使用 CoreGraphics 的新手。当调用 CTFramesetterCreateFrame 时,会自动调用 frameRef 上的 retain。我不必担心返回时释放 frameRef,因为它存储在 newFrameRef 中并且保留计数保持不变。我只需要担心释放 newFrameRef (CTRelease(newFrameRef))。这是正确的吗?

更新:我实际上仍然会因此而发生内存泄漏,一次发生在返回行,一次发生在我释放“newFrameRef”的地方

最佳答案

C 接口(interface) API 从旧的 Foundarion Kit 命名指南中汲取灵感,该指南有两个截然不同(且有用)的命名约定,称为 Get RuleCreate Rule .为简洁起见:任何包含单词 create 的 C 函数都会返回一个必须手动管理的引用。因此,要回答您的问题,是的,您确实需要发布 CTFramesetterRef,因为您现在手上有漏洞。

关于iphone - 使用返回值管理 CoreGraphics/CoreText 中的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11789835/

相关文章:

iphone - UITextView 隐藏一些文本

iphone - 在 UITextview 中禁用放大镜

ios - 如何在TableView中的CollectionView中获取图像的索引路径?

ios - UITextField 的代表不工作...返回按钮没有响应

iOS 8 – 创建临时的 NSManagedObjects

objective-c - Xcode - 将大量整数保存到文件的最简化方法

iphone - 苹果商店允许的最大 Iphone 应用程序大小

ios - 添加页面时 UIPageViewController 崩溃

iphone - 何时取消订阅 UIView 中的 NSNotification

iphone - In App Purchase 服务器模型是面向设备的还是面向用户的?