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

wil*_*lc2 26 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;  
}  
Run Code Online (Sandbox Code Playgroud)

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

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

ben*_*ado 28

如果方法名称以...开头new,则clang将指望它返回一个保留计数为1的对象.换句话说,将方法重命名somePathnewSomePath将使分析器静音.

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

  • @Pascal分析仪是否抱怨C函数?这些也有命名约定.我认为包含`Copy`或`Create`的名称应该返回保留的项目. (3认同)

Mob*_*obs 8

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

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