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

まず、iOSでのキャッシュの特徴を上げてみます。

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

キャッシュ機能は必要?

さて、ここからが本題ですが、はたしてこのキャッシュ機能必要でしょうか?

ネットワークで通信をするというのはどういう時があるでしょうか?
自分は大まかに分けて2つあると思っています。

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

このうち、WebViewを使ってネットサーフィンをする場合、戻るボタンを押す可能性があるのでキャッシュは会ったほうがユーザーのためでしょう。
しかし、APIを使うときは戻るボタンを押すという行為はないですし、更新ボタンを押したときは最新のデータが欲しいのでキャッシュは邪魔ですし、必要ないのではないでしょうか?

逆にキャッシュがあることにより、キャッシュ用のメモリ確保・解放に時間を使ってしまい、少ないメモリを消費してしまいます。

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

そんなあんまり使わなそうなキャシュをオフにするのは簡単で、一行書くだけです。
[objc]
[[NSURLCache sharedURLCache] setMemoryCapacity:0];
[/objc]

こちらをAppDelegateのapplication:didFinishLaunchingWithOptions:あたりに書いてあげればキャッシュが生成されなくなります。

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

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>