当我需要返回它时如何释放这个 CGPath
Posted
技术标签:
【中文标题】当我需要返回它时如何释放这个 CGPath【英文标题】:How do I release this CGPath when I need to return it 【发布时间】:2010-12-19 07:03:54 【问题描述】:我有一个返回 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 在它返回给它的调用者之前消失?
【问题讨论】:
你还在为 Xcode/Clang 向你抱怨而烦恼吗? 和你一样的问题,还在寻找答案。 【参考方案1】:如果方法名称以 new
开头,clang 将期望它返回一个保留计数为 1 的对象。换句话说,将方法从 somePath
重命名为 newSomePath
将使分析器安静。
如果你真的想自动释放 CGPathRef,你可能可以将它转换为 NSObject,然后调用 autorelease。我知道这适用于 CFTypes,老实说,我不确定 CGPathRef 是否符合条件。
【讨论】:
也为我工作!非常感谢。 太糟糕了,这不适用于返回 CG 对象的 C 函数。 :( @Pascal 分析器是否在抱怨 C 函数?这些也有命名约定。我认为包含Copy
或Create
的名称预计会返回保留的项目。
太棒了,使用create...
作为函数名成功了,谢谢!
@benzado 谢谢你救了我。在我的 C 函数上使用 create 就像一个魅力。这是特定于 Apple 的编译器还是一般的 C?【参考方案2】:
如何创建一个可变路径,将其传递给您的构建函数,然后使用和释放它:
CGMutablePathRef mPath = CGPathCreateMutable();
[buildPath:mPath]; //adds reusable lines etc
...do something with it...
CGPathRelease(mPath);
【讨论】:
以上是关于当我需要返回它时如何释放这个 CGPath的主要内容,如果未能解决你的问题,请参考以下文章