9

Apple のドキュメントには別の方法が示されていますが、NSURLCacheiOS ではディスク (フラッシュ) キャッシュはまったく行われません。サブクラスNSURLCache化して、ディスクを使用するようにフェッチおよびストア操作の動作を変更できますが (実際に行っているようSDURLCacheに)、キャッシュの使用方法と実装方法に関する以下の厳しい制限により、これは期待どおりに機能しません。 :

  • NSURLConnectionstoreCachedResponse:forRequest:約 50KB (正確には >= 52428 バイト) を超えるファイルは必要ありません。NSURLCacheこれにより、キャッシュに到達することさえできないため、サブクラス化 (200KB の画像) は無意味になります。その結果、上のレベルでキャッシングを手動で追加する必要がありますNSURLConnection
  • NSURLCache のビルトインをstoreCachedResponse:forRequest:手動で呼び出した場合でも、応答が約 180KB 未満の場合にのみメモリに格納されます。storeCachedResponse を手動で呼び出してこれをテストし、currentMemoryUsage約 180KB を超えるデータ長の前後で変更がないことを確認しました。そのため、独自の LRU メモリ キャッシュも作成する必要があります。

他の誰かがこれらの問題に気づきましたか? または、私が見逃しているものがありますか?

参考までに、シミュレーターと iPad 2 で iOS 4.3 を実行しています。

4

4 に答える 4

3

NSURLRequestの代わりにASIHTTPRequestライブラリを使用することをお勧めします。

http://allseeing-i.com/ASIHTTPRequest/How-to-use

堅牢なキャッシングAPIがあります。

http://allseeing-i.com/ASIHTTPRequest/How-to-use#using_a_download_cache

于 2011-08-31T01:11:59.613 に答える
2

UIWebview でどのように機能するかはわかりませんが、NSURLRequest を使用する場合、ファイルの最大サイズは URLCache の初期化方法によって異なります (initWithMemoryCapacity:(NSUInteger)memoryCapacity ...)

于 2013-01-25T10:54:58.203 に答える
1

three20ライブラリと TTURLRequestを使用することをお勧めします。Facebook、特に写真に使用されているため、これは大きなデータ サイズのキャッシュに適しているようです。

TTURLRequest はほとんど NSURLRequest の置き換えであり、簡単に移動でき、Three20 の残りの部分にあまり依存していません。

于 2011-08-29T10:50:05.063 に答える
0

ディスク保存をサポートする NSURLCache のカスタム クラスを含む AFNetworking のフォークを確認してください: https://github.com/steipete/AFNetworking/tree/disk-cache

于 2011-09-13T11:56:01.610 に答える