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

前端之家收集整理的这篇文章主要介绍了objective-c – 使有关释放CGMutablePathRef对象的编译器警告静音前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已启用静态分析器,但它告诉我在该执行路径的末尾该对象未被释放,因此可能导致内存泄漏.然而,我将对已创建对象的引用传递给另一个将释放它的类.我想知道是否有一个方法或关键字告诉编译我稍后会释放这个对象.

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

顺便说一下,我正在使用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是我使用的唯一属性,我只使用静态调度.

猜你在找的Xcode相关文章