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是我使用的唯一属性,我只使用静态调度. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |