当我需要返回它时,如何释放此CGPath

时间:2009-11-22 20:53:51

标签: iphone cocoa-touch memory-management quartz-graphics

我有一个返回 CGMutablePathRef 的方法,如下所示:

- (CGMutablePathRef)somePath;  
{  
    CGMutablePathRef theLine = CGPathCreateMutable(); 

    CGPathMoveToPoint(theLine, NULL, 50, 50);  
    CGPathAddLineToPoint(theLine, NULL, 160, 480);  
    CGPathAddLineToPoint(theLine, NULL, 270, 50);

    return theLine;  
}  

Xcode / Clang静态分析仪警告说存在潜在的泄漏。文档说要调用 CGPathRelease(),但我会把它放在哪里?

如果我在方法返回之前将其放入,那么 theLine 会在返回给它的调用者之前消失吗?

2 个答案:

答案 0 :(得分:28)

如果方法名称以new开头,则clang会指望它返回保留计数为1的对象。换句话说,将方法从somePath重命名为newSomePath将安静的分析仪。

如果您确实要自动释放CGPathRef,则可能能够将其强制转换为NSObject,然后调用autorelease。我知道这适用于CFTypes,老实说我不确定CGPathRef是否合格。

答案 1 :(得分:8)

如何创建mutablepath,将其传递给构建函数,然后使用并释放它:

CGMutablePathRef mPath = CGPathCreateMutable();
[buildPath:mPath]; //adds reusable lines etc
...do something with it...
CGPathRelease(mPath);