iPhoneのネットワークキャッシュは不要?

iPhoneで、NSURLConnectionなどネットワーク通信はキャッシュが作成されます。 ここだけ読むと、2度目以降はキャッシュからデータを取ってくれる良い仕組みだな〜 で終わってしまうんですが、これには幾つかの罠があります。 まず、iOSでのキャッシュの特徴を上げてみます。

  • キャッシュはメモリにのみで、ディスクにはキャッシュされない
  • メモリキャッシュの容量はデフォルトで512KB
  • メモリキャッシュの容量は変えられる
  • メモリキャッシュのみなので、アプリを終了させるとすべてのキャッシュは消える

キャッシュ機能は必要?

さて、ここからが本題ですが、はたしてこのキャッシュ機能必要でしょうか? ネットワークで通信をするというのはどういう時があるでしょうか? 自分は大まかに分けて2つあると思っています。

  • WebViewを使ってネットサーフィンをするとき
  • twitterクライアントなど、APIを使って可変なデータをDLするとき

このうち、WebViewを使ってネットサーフィンをする場合、戻るボタンを押す可能性があるのでキャッシュは会ったほうがユーザーのためでしょう。 しかし、APIを使うときは戻るボタンを押すという行為はないですし、更新ボタンを押したときは最新のデータが欲しいのでキャッシュは邪魔ですし、必要ないのではないでしょうか? 逆にキャッシュがあることにより、キャッシュ用のメモリ確保・解放に時間を使ってしまい、少ないメモリを消費してしまいます。

キャッシュ機能をオフにする方法

そんなあんまり使わなそうなキャシュをオフにするのは簡単で、一行書くだけです。

1
[[NSURLCache sharedURLCache] setMemoryCapacity:0];

こちらをAppDelegateのapplication:didFinishLaunchingWithOptions:あたりに書いてあげればキャッシュが生成されなくなります。 ちょっと自分の意見も入って熱くなってしまいましたが、 メモリ不足を解消する一つの手法として、キャッシュを使わないという手段があり、 キャッシュの利用率から考えるとかなり有効な手段ではないかな、というお話でした。