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

时间:2012-08-03 05:35:19

标签: 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中且保留计数保持不变。我不得不担心的是发布newFrameRefCTRelease(newFrameRef))。这是对的吗?

更新:我实际上仍然从这里得到一个内存泄漏,一个在返回的行,另一个在我发布“newFrameRef”

1 个答案:

答案 0 :(得分:1)

C-interface API从旧的Foundarion Kit命名指南中获取提示,该指南有两个不同的(也是有用的)命名约定,称为Get RuleCreate Rule。为简洁起见:任何包含单词create的C函数都会返回您必须手动管理的引用。所以要回答你的问题,是的,你确实需要释放CTFramesetterRef,因为你现在手上有泄漏。