0

いくつかのPDFをNSManagedObjectタイプのプロパティに保存していますNSData。プロパティに「外部ストレージを使用する」を設定しましたが、非常にうまく機能します。私が抱えている問題は、PDFが非常に大きい場合、メモリが不足しているためにアプリがクラッシュすることです。データチャンクをチャンクごとに直接ディスクに保存する方法はありますか?私はすでに使用していますrefreshObject:mergeChanges:が、それでも、完全なダウンロードが完了するまで(そして、呼び出すことができるようになるまでrefreshObject:mergeChanges:)データをメモリに保持して、プロパティに障害を発生させ、メモリを解放する必要があります。もちろん、大規模なドキュメントの場合、それは遅くなりますが、それを実行する機会が得られる前にクラッシュします。

4

1 に答える 1

0

私があなたの立場ならNSInputStream、入ってくる PDF ファイルを取得し、 を使用しNSOutputStreamて直接ディスクに書き込むと思います。

コア データに関しては、完全にメモリにフォールトするつもりのないファイルに使用するのは適切ではないと思います。Apple は、コア データを介してディスクに保存されたファイルから NSInputStream を取得するオプションを提供していません (とにかく私は知っています)。その場合、ファイルの場所をコア データに保存し、そのファイル パスで障害が発生した後、NSInputStreamその保存されたパスから を作成します。

ほとんどの開発者が好むよりも抽象度が少し低くなりますが、メモリ不足によるクラッシュを引き起こす可能性のあるものをすべて制御できるようにすることをお勧めします。

于 2012-04-19T23:56:16.270 に答える