gpt4 book ai didi

objective-c - 使有关释放 CGMutablePathRef 对象的编译器警告静音

转载 作者:搜寻专家 更新时间:2023-10-30 19:44:44 24 4
gpt4 key购买 nike

我已启用静态分析器,但它告诉我在该执行路径的末尾该对象未被释放,因此可能导致内存泄漏。但是,我将对创建对象的引用传递给另一个将释放它的类。我想知道是否有方法或关键字告诉编译器我稍后会释放这个对象。

我正在寻找类似自动发布的东西。

顺便说一下,我正在使用 ARC。

我这样创建对象:

CGMutablePathRef pathRef = CGPathCreateMutable();

然后像这样传递:

self.flowView.pathToDraw = pathRef;

在我的 flowView 类中,我有这个方法可以释放它。

-(void) setPathToDraw:(CGMutablePathRef) newPath {
if(pathToDraw!=NULL) CGPathRelease(pathToDraw);
pathToDraw=newPath;
[self setNeedsDisplay];
}

我已经尝试查看 GCPath 文档,但没有成功。

谢谢

最佳答案

是的,有一个扩展:

http://clang.llvm.org/docs/LanguageExtensions.html#objc_features

您可以将您的方法声明为:

- (void)setPathToDraw:(CGMutablePathRef) __attribute__((cf_consumed)) newPath

然后 Clang 会识别出这一点(从调用站点——它无法检查您是否确实在定义中使用了它)。

您需要确保定义它的每个选择器都符合您为选择器应用的属性(名称)。

属性是有风险的——我建议尽可能遵守约定,并在处理动态调度时格外小心。 Here's an example using ARC where the compiler can get it wrong .如果编译器出错,那么您也很可能会出错,因为您正在与试图帮助您的工具对抗。

IIRC,consume 是我使用过的唯一属性,我只将它与静态分派(dispatch)一起使用。

关于objective-c - 使有关释放 CGMutablePathRef 对象的编译器警告静音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9816503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com