3

NSURLCacheメモリ警告を受け取ったときに共有をクリアすることは良い習慣ですか?このようなもの:

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
    [[NSURLCache sharedURLCache] removeAllCachedResponses];
}

これによってディスクキャッシュも不必要にクリアされると想定するのは正しいですか?

もしそうなら、メモリキャッシュのみをクリアすることは可能ですか?

4

1 に答える 1

5

メモリの警告がある場合は、ディスク上のキャッシュではなく、メモリ内のキャッシュをクリアするだけで済みます。の問題removeAllCachedResponsesは、両方をクリアすることです。私のテストから、これはメモリ内のキャッシュだけをクリアするようです。

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {

    NSURLCache * const urlCache = [NSURLCache sharedURLCache];
    const NSUInteger memoryCapacity = urlCache.memoryCapacity;
    urlCache.memoryCapacity = 0;
    urlCache.memoryCapacity = memoryCapacity;
}

私の唯一の懸念はスレッドの問題です。この記事の下部に脚注があります。

StackOverflowには、NSURLCacheを再作成してパージすることに関する多くの推奨事項がありますが、キャッシュの再作成中に別のスレッドでリクエストが発生すると、クラッシュが発生することがあります。したがって、アプリの起動時にキャッシュを1回作成し、必要に応じてキャッシュを削除することをお勧めします。

上記のソリューションはキャッシュを再作成しませんが、それでも同じ問題が発生する可能性があるため、これを広範囲にテストしていません。

于 2014-08-11T09:37:02.660 に答える