1

問題のあるリークに遭遇しました。これは、Instrumentsのおかげで、CTFrameSetterCreateWithAttributedStringから発生しているように見えます。コールスタックは以下のとおりです。

1 CoreText -[_CTNativeGlyphStorage prepareWithCapacity:preallocated:]
2 CoreText -[_CTNativeGlyphStorage initWithCount:]
3 CoreText +[_CTNativeGlyphStorage newWithCount:]
4 CoreText TTypesetterAttrString::Initialize(__CFAttributedString const*)
5 CoreText TTypesetterAttrString::TTypesetterAttrString(__CFAttributedString const*)
6 CoreText TFramesetterAttrString::TFramesetterAttrString(__CFAttributedString const*)
7 CoreText CTFramesetterCreateWithAttributedString

この呼び出しスタックを生成するコードは次のとおりです。

CFAttributedStringRef attrRef = (CFAttributedStringRef)self.attributedString;
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(attrRef);
CFRelease(attrRef);
...
CFRelease(framesetter);

self.attributedStringは他の場所でリリースされます。私は他のすべてを正しくリリースしているように感じます...これらすべてを考えると、リークはどこから来ているのでしょうか?それは私の目的にとってかなり重要です-6-10MBのポップ。助けてくれてありがとう。

4

1 に答える 1

0

この問題は、CFMutableArrayRefにivarを使用しないことで実質的に対処されたことがわかりました。CoreTextにAkosmaObj-Cラッパーを使用していましたが、AKOMultiColumnTextViewクラスにはCFMutableArrayRef _frames ivarがあり、何らかの理由でCFReleaseを呼び出した後もぶら下がっています。_frames ivarがない場合は少しコストがかかりますが、メモリ使用量が大幅に改善されています。貢献してくれたNeevekに感謝します。

于 2012-05-22T11:06:00.220 に答える