2

オブジェクトを取り込んで、そこから次のようCTFramesetterRefにビルドする簡単なメソッドがあります。CTTextFrameRef

- (CTFrameRef) createFrameRefWithFramesetterRef:(CTFramesetterRef)framesetterRef
{
    CTFrameRef frameRef = CTFramesetterCreateFrame(framesetterRef, CFRangeMake(0, 0), self.mutablePathRef, NULL);
    return frameRef;
}

次に、別のメソッドで上記のメソッドを呼び出します。

- (void) someMethod
{
     CTFramesetterRef framesetterRef = CTFramesetterCreateWithAttributedString((CFMutableAttributedStringRef)self.text);
     CTFrameRef newFrameRef = [self createFrameRefWithFramesetterRef:framesetterRef];
     //do some stuff
     CTRelease(newFrameRef);
     CTRelease(framesetterRef);
}

を使用するのは初めてなので、ここでメモリを適切に管理したことを確認したかっただけですCoreGraphics。がCTFramesetterCreateFrame呼び出されると、retainが自動的に呼び出されframeRefます。に保存され、保持カウントは同じままなframeRefので、返却時にリリースすることを心配する必要はありません。newFrameRef私が心配しなければならないのはリリースnewFrameRefCTRelease(newFrameRef))だけです。これは正しいです?

更新:実際には、これからまだメモリリークが発生しています。1つはリターンの行で、もう1つは「newFrameRef」をリリースしています。

4

1 に答える 1

1

C インターフェイス API は、 Get RuleCreate Ruleと呼ばれる 2 つの異なる (そして役立つ) 命名規則がある古い Foundation Kit 命名ガイドからヒントを得ています。簡潔にするために、この単語を含む C 関数は、create手動で管理する必要がある参照を返します。あなたの質問に答えるには、はい、それをリリースする必要がありCTFramesetterRefます。

于 2012-08-03T05:49:32.307 に答える