2012-03-05 7 views
0

私はiOSを初めてお使いになり、iOS用の書籍リーダー(Stanzaなど)を作成します。しかし、今私はAppleが提供するテキスト関連のAPIに混乱しています。かなりの数があります。私はそれらの1つ、Core Textを見ましたが、これは使いやすいと思われます。しかし、問題は、Core Textがメモリを再利用しないことです。テキストのページを描画するためには、NSAttributedStringCTFramesetterRefCTFrameRefを作成する必要があります。テキストが画面に描かれた後、それらのオブジェクトは解放されるはずです、彼らが占有していたメモリは再利用できませんでした(またはそれらのメモリを再利用する方法があります)。QuartzでCore Text APIまたは描画APIを使用する必要がありますか?

したがって、これらのAPIのメモリ使用は効率的ではなく、メモリ割り当てと割り当て解除が頻繁に行われるようです。

は、私は何をしたいのですが、私はいくつかのテキストを描画したい場合drawRect:文脈にそれらを設定し、可能なキャッシュいくつかのコンテキスト設定だということで、テキストはプレーンなNSMutableString*(ないNSAttributedString*)にキャッシュされ、後で私はNSMutableString*キャッシュにテキストを追加することができます。

PS:キャッシュにNSMutableString*を使用する理由は、本のtxtファイルはメモリに保存するには大きすぎることがあるからです(メモリの有効使用に関する限り)。私はいつもブロックを保持しますテキストの数ページ、メモリ内のいくつかのページなど、ユーザーがページをめくるときには、txtファイルからさらに多くのページを読み込み、テキストをキャッシュに追加します。もちろん、会った

質問は次のとおりです。どのテキストAPIを使用する必要がありますか、その理由は何ですか?またはコアテキストを使用する必要がある場合、それらのメモリを再利用することは可能ですか?

ありがとうございます!

答えて

0

メモリを再利用できます。 CoreTextは、テキストを扱うための優れたフレームワークです。取得したメモリを解放するには、CFRelease()を使用する必要があります。 CoreFoudationメモリ管理ガイドをご覧ください。

+0

再利用とは、アプリケーションが終了するまで「メモリを解放する必要はありません」という意味です。 char配列 'char [10]'のように、 'char [0] = 'a''と言うことができ、値が' 'a''であるchar [0] 'char [0] = 'b''を実行し、' char [0] 'で何かをやり直してください。値は' 'b''です。 – neevek

+0

あなたの言うことは、オブジェクトの可変変形で行うことができます。つまり、NSAttributedStringの代わりにNSMutableAttributedStringを使うことができます。 – Vignesh

+0

しかし、私はまだ 'CTFrameRef'や 'CTFramesetterRef'のようなオブジェクトを再利用することはできません。関数にパラメータとして渡されるのではなく、作成時に常に関数から返されます。 – neevek

関連する問題