我有一个返回 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 会在返回给它的调用者之前消失吗?
答案 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);