2016-09-16 19 views
2

私はここで良い解決策を考えるのに苦労しています。だから、私のアプリでは、私はユーザーデータを読み込むUITableViewを持って、各セルは、プロファイル画像UIImageViewを持っています。だから、毎回セルをループしていくたびに、各ユーザーのプロファイル写真を個別にダウンロードしています。このため、NSCacheを使用してプロフィール写真を保存しました。これはすごくうまくいったし、今や遅れはなくなった。NSCacheを定期的に定期的にクリアする方法は?

ただし、プロフィールの写真を変更したらどうなりますか?プロフィール写真は、ユーザーごとにバックエンド1でアップロードされます。私はユーザーIDを使ってこれらのプロフィール写真を参照しています。誰かが自分のプロフィール写真を変更した場合、新しい画像ではなく、キャッシュに保存されている画像だけが読み込まれます。だから、私はIOSデバイス上のキャッシュ全体を3時間に一度のようにクリアしたい。それはすべてを治すでしょう。どのくらいの間隔でNSCache全体をクリアしますか?

TL;
時間間隔でアプリのNSCache全体をクリアするにはどうすればよいですか? (例:3時間ごとにアプリキャッシュをクリアする)

+1

あなたのバックエンドイメージのIDを変更すると、アプリのクリアキャッシュよりも効率が良いと思います。クリアすると、他のユーザーデータもクリアされ、まったくユーザーは3時間ストレートでアプリを使用しません。 – Tj3n

+0

@ Tj3n私はプロファイル写真をキャッシュするだけです!他のすべての情報はリアルタイムでダウンロードされます –

+0

私はプロファイルの写真をキャッシュし、毎回新しいデータを取得することを知っています。なぜあなたはキャッシュをクリアし、それが変わると – Tj3n

答えて

2

アプリデリゲートメソッドを使用して、ユーザーがアプリのフォアグラウンドに入るたびにチェックを実装することができます。ユーザーが最後にアプリを開いたときの変数を保持し、現在の時刻が3時間以上経過している場合は、キャッシュをクリアします。

コメントに記載されているとおり、ほとんどのユーザーには3時間のセッションはありません。

サイドノート:ほとんどのユーザーは、すぐに更新されないイメージを理解している可能性があります。たとえば、Twitterが更新するのにしばらく時間がかかります。私のアプリでは、キャッシュをそのままにして、アプリが完全に終了するたびにすべての画像を再ダウンロードします。画像をサーバーに保存する前に圧縮すると、データの使用状況が悪くなることはありません。

+0

これまでのところ最高の答え。私は実際に画像を圧縮しているので、実際問題はありません。私は実際にあなたの "サイドノート"に興味があります。では、どのような方法でこれを正確に入れますか? didEnterBackgroundまたはwillEnterForeground? –

+0

@JohnLeonardoサイドノートのために、私はちょうど彼らがアプリケーションが死ぬと死ぬようにしました。幸運にも、私のNSCache(そして私はあなたのものだと思うので)は、アプリケーションが強制終了したときのことを意味する変数です。つまり、ユーザーがホームボタンをダブルクリックしてスワイプすると、変数は次回に最初の宣言に戻りますアプリを起動します。 – Dallas

+0

@JohnLeonardoキャッシュを削除するとき、つまり3時間ごとに特定する場合は、その時点でアプリデリゲートを使用します。私はおそらくapplicationWillEnterForegroundメソッドを使用します。私の答えがあなたのために働く場合、選択してください受け入れられた答えとしてです:)ありがとう。 – Dallas

関連する問題