0

CGMutablePath在以下情况下使用 a 时出现内存泄漏:

- (CGMutablePathRef) textMutablePathForFrame:(CGRect)frame
{
    CGAffineTransform transform = CGAffineTransformMakeScale(frame.size.width / self.shapeMutablePathSize.width, frame.size.height / self.shapeMutablePathSize.height);

    return CGPathCreateMutableCopyByTransformingPath(self.shapeMutablePath, &transform);
}

- (CTFrameRef) textFrameForFrame:(CGRect)frame framesetter:(CTFramesetterRef)framesetter
{
    CGMutablePathRef textMutablePath = [self textMutablePathForFrame:frame];
    CTFrameRef textFrame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), textMutablePath, NULL);
    CGPathRelease(textMutablePath);

    return textFrame;
}

通过仪器分析,我在带有“ return”的行中textMutablePathForFrame发现内存泄漏,其中表示“在第 132 行分配的对象的潜在泄漏”(第 132 行是返回行本身)。

我还在textFrameForFrame“”行出现内存泄漏CGPathRelease(textMutablePath);:“调用者此时不拥有的对象的引用计数不正确递减”。

无法理解这一点,感觉我终于对 Core 中的内存管理有了一个很好的理解。

更新:看起来这可能是一个错误,要再撞一次,看看其他人是否有不同的感觉。

4

2 回答 2

2

@JonathanCichon 原则上是正确的,但命名约定错误。ObjC 方法的正确命名约定是newMutablePathForFrame. 分析仪是正确的。“创建”规则仅适用于 Core Foundation。ObjC 命名约定在Advanced Memory Management Programming Guide中。Core Foundation 规则略有不同,包括“创建”规则,位于Core Foundation 的内存管理编程指南中

于 2012-08-30T14:45:50.523 回答
1

我不认为你有内存泄漏,将你的textMutablePathForFrame方法名称更改为createMutablePathForFrame,警告应该消失。

于 2012-08-29T07:31:40.180 回答