我开始使用静态代码分析来查找代码中的内存管理问题。我发现它非常有用,但是我编写的一些代码肯定不会导致内存泄漏(仪器不报告任何内容),但分析器正在报告。我认为这是我以不友好的方式编写代码的问题。这是一个例子
for (glyphUnit *ellipsisDot in ellipsisArray) {
CGPathRef newDot = CGPathCreateCopyByTransformingPath(ellipsisDot.glyphPath, &ellipsisTransform);
CGPathRelease(ellipsisDot.glyphPath); // Incorrect decrement of the reference count of an object that is not owned at this point by the caller
ellipsisDot.glyphPath = newDot;
}
whereglyphUnit
是一个简单的自定义类,它具有 aGCPathRef
作为属性,自定义类在其dealloc
方法中释放它。所以在这个循环中,我正在转换路径并将其存储在一个newDot
然后释放原始 glyphPath 以便我可以将新创建的一个分配给它。我可以看到这是如何让代码分析器感到困惑,它给出了一条消息,我正在递减一个我不拥有的对象。是否有另一种方法可以在不混淆新路径的情况下进行交换?