実際にメモリの問題であることを確認し、メモリ不足の状態を処理することをお勧めします。その方法については、この SO の投稿を参照してください:
iPhone - メモリ不足の状態に対処する方法
書籍のコンテンツを一度に NSString にロードしようとすると、メモリに制約のあるデバイスでメモリ不足の状態になる可能性があります。ストリームを使用すると、ファイルを一度に部分的に読み取り、ファイルの現在の部分のみをメモリに保持できます。一部の書籍を完全に正常に読み込むことができたとしても、速度は遅くなり、アプリが必要とするよりもはるかに多くのメモリを消費します。これにより、メモリ不足の状態で最初にフラグが立てられるアプリの 1 つになります。
チェックアウトApple のストリーム プログラミング ガイド
そのガイドから:
Cocoa には、NSStream、NSInputStream、および NSOutputStream という 3 つのストリーム関連のクラスが含まれています。NSStream は、すべてのストリーム オブジェクトの基本的なインターフェイスとプロパティを定義する抽象クラスです。NSInputStream と NSOutputStream は NSStream のサブクラスであり、デフォルトの入力ストリームと出力ストリームの動作を実装します。メモリ内にあるか、ファイルまたは C バッファに書き込まれたストリーム データの NSOutputStream インスタンスを作成できます。NSData オブジェクトまたはファイルから読み取ったストリーム データの NSInputStream インスタンスを作成できます。
編集:コメントで、XMLからロードしていることを明確にしました。あなたはまだ同じ基本的な問題を抱えています.一度に何らかの「本」の大きなコンテンツをメモリにロードしようとしています. XMLを解析するときにtmp文字列を追加しているため、効果は同じです。そのため、ブックの必要な部分を段階的にロードする方法を見つける必要があります。幸いなことに、ストリームを使用するように NSXMLParser に指示できます。
これは役立つかもしれません:
Using NSXMLParser initWithStream: no parser delegate methods received
また、役立つ可能性のあるトピックに関するこの SO 投稿も見つけました: Objective-C: Reading a file line by line
アプリの詳細についてはわかりませんが、必要な現在のデータ (および両側の数ページ) までストリーミングすることも、コンテンツをストリーミングしてディスク上のいくつかの一時ファイルの「ページ」に分割することもできます。 「ページキャッシュ」の。