0

CGMutablePath次の状況で作業しているときにメモリリークが発生します。

- (CGMutablePathRef) textMutablePathForFrame:(CGRect)frame
{
    CGAffineTransform transform = CGAffineTransformMakeScale(frame.size.width / self.shapeMutablePathSize.width, frame.size.height / self.shapeMutablePathSize.height);

    return CGPathCreateMutableCopyByTransformingPath(self.shapeMutablePath, &transform);
}

- (CTFrameRef) textFrameForFrame:(CGRect)frame framesetter:(CTFramesetterRef)framesetter
{
    CGMutablePathRef textMutablePath = [self textMutablePathForFrame:frame];
    CTFrameRef textFrame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), textMutablePath, NULL);
    CGPathRelease(textMutablePath);

    return textFrame;
}

機器の分析により、「行132に割り当てられたオブジェクトの潜在的なリーク」(行132はリターン行自体)を示す「 return」の行でメモリリークが発生します。textMutablePathForFrame

また、 「この時点で呼び出し元が所有していないオブジェクトの参照カウントの誤ったデクリメント」というtextFrameForFrame行でメモリリークが発生します。CGPathRelease(textMutablePath);

これに頭を悩ませることはできません。Coreのメモリ管理についてようやくよく理解できたように感じました。

更新:これはおそらくバグのように見えます。もう一度ぶつけて、他の誰かが違った感じをしているのかどうかを確認します。

4

2 に答える 2

2

@JonathanCichonは原則として正しいですが、命名規則が間違っています。ObjCメソッドの正しい命名規則はですnewMutablePathForFrame。アナライザーは正しいです。「作成」ルールはCoreFoundationにのみ適用されます。ObjCの命名規則は、 『Advanced Memory Management Programming Guide』にあります。わずかに異なり、「作成」ルールを含むCore Foundationルールは、CoreFoundationのメモリ管理プログラミングガイドにあります。

于 2012-08-30T14:45:50.523 に答える
1

メモリリークがあるとは思わないので、textMutablePathForFrameメソッド名をに変更するcreateMutablePathForFrameと、警告が消えるはずです。

于 2012-08-29T07:31:40.180 に答える