静的コード分析を利用して、コード内のメモリ管理の問題を見つけ始めています。非常に便利だと思いましたが、メモリリークを引き起こしていない(機器は何も報告していません)が、アナライザーによって報告されていると確信しているコードがいくつかあります。わかりにくい方法でコードを書くのは私の問題だと思います。これが例です
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;
}
ここglyphUnit
で、はプロパティとしての単純なカスタムクラスであり、カスタムクラスはそのメソッドGCPathRef
でリリースします。dealloc
したがって、このループでは、パスを変換して保存しnewDot
、元のglyphPathを解放して、新しく作成したパスを割り当てることができるようにします。これがコードアナライザーを混乱させていることがわかります。所有していないオブジェクトをデクリメントしているというメッセージが表示されます。混乱することなく新しいパスを交換する別の方法はありますか?