加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 17:30:33 所属栏目:百科 来源:网络整理
导读:我已启用静态分析器,但它告诉我在该执行路径的末尾该对象未被释放,因此可能导致内存泄漏.然而,我将对已创建对象的引用传递给另一个将释放它的类.我想知道是否有一个方法或关键字告诉编译我稍后会释放这个对象. 我正在寻找像自动释放这样的东西. 顺便说一下,
我已启用静态分析器,但它告诉我在该执行路径的末尾该对象未被释放,因此可能导致内存泄漏.然而,我将对已创建对象的引用传递给另一个将释放它的类.我想知道是否有一个方法或关键字告诉编译我稍后会释放这个对象.

我正在寻找像自动释放这样的东西.

顺便说一下,我正在使用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会认识到这一点(来自callsite – 它无法检查你确实在定义中使用它).

您需要确保定义此选项的每个选择器都遵循您为选择器(名称)应用的属性.

属性是有风险的 – 我建议尽可能坚持惯例,并在处理动态调度时要格外小心. Here’s an example using ARC where the compiler can get it wrong.如果编译器弄错了,那么你也有机会,因为你正在努力反对那些试图帮助你的工具.

IIRC,consume是我使用的唯一属性,我只使用静态调度.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读