私はiOSを初めてお使いになり、iOS用の書籍リーダー(Stanzaなど)を作成します。しかし、今私はAppleが提供するテキスト関連のAPIに混乱しています。かなりの数があります。私はそれらの1つ、Core Textを見ましたが、これは使いやすいと思われます。しかし、問題は、Core Textがメモリを再利用しないことです。テキストのページを描画するためには、NSAttributedString
、CTFramesetterRef
、CTFrameRef
を作成する必要があります。テキストが画面に描かれた後、それらのオブジェクトは解放されるはずです、彼らが占有していたメモリは再利用できませんでした(またはそれらのメモリを再利用する方法があります)。QuartzでCore Text APIまたは描画APIを使用する必要がありますか?
したがって、これらのAPIのメモリ使用は効率的ではなく、メモリ割り当てと割り当て解除が頻繁に行われるようです。
は、私は何をしたいのですが、私はいくつかのテキストを描画したい場合drawRect:
文脈にそれらを設定し、可能なキャッシュいくつかのコンテキスト設定だということで、テキストはプレーンなNSMutableString*
(ないNSAttributedString*
)にキャッシュされ、後で私はNSMutableString*
キャッシュにテキストを追加することができます。
PS:キャッシュにNSMutableString*
を使用する理由は、本のtxtファイルはメモリに保存するには大きすぎることがあるからです(メモリの有効使用に関する限り)。私はいつもブロックを保持しますテキストの数ページ、メモリ内のいくつかのページなど、ユーザーがページをめくるときには、txtファイルからさらに多くのページを読み込み、テキストをキャッシュに追加します。もちろん、会った
質問は次のとおりです。どのテキストAPIを使用する必要がありますか、その理由は何ですか?またはコアテキストを使用する必要がある場合、それらのメモリを再利用することは可能ですか?
ありがとうございます!
再利用とは、アプリケーションが終了するまで「メモリを解放する必要はありません」という意味です。 char配列 'char [10]'のように、 'char [0] = 'a''と言うことができ、値が' 'a''であるchar [0] 'char [0] = 'b''を実行し、' char [0] 'で何かをやり直してください。値は' 'b''です。 – neevek
あなたの言うことは、オブジェクトの可変変形で行うことができます。つまり、NSAttributedStringの代わりにNSMutableAttributedStringを使うことができます。 – Vignesh
しかし、私はまだ 'CTFrameRef'や 'CTFramesetterRef'のようなオブジェクトを再利用することはできません。関数にパラメータとして渡されるのではなく、作成時に常に関数から返されます。 – neevek