6

NSCache のグローバル インスタンスを 1 つ使用するのが最適なのか、それを必要とするコンポーネントごとに複数のインスタンスを使用するのが最適なのか疑問に思っています。

たとえば、コンテンツを画像に描画してキャッシュし、常に再生成しないようにするいくつかのビュー サブクラスがあります。クラスごとに NSCache のインスタンスを 1 つ持つ方が良いですか、それともアプリ全体に対して 1 つの集中型 NSCache だけにする方が良いですか?

オブジェクトのインスタンスごとに 1 つのキャッシュという意味ではないことに注意してください。クラスごとに NSCache の 1 つのインスタンスについて話しているのです。

4

2 に答える 2

3

明らかに状況によって異なりますが、私は通常、キャッシュされたオブジェクトのタイプごとに 1 つのキャッシュに投票します。countLimitそうすれば、たとえば、「最近レンダリングされた 50 個のサムネイルを保持する」、「最近ダウンロードされた 5 個の大きな画像を保持する」、「最近ダウンロードされた 10 個の PDF を保持する」などを指定するために、それぞれに異なる値を設定できます。

非常に計算コストの高いタスクについてはNSCache、最適なパフォーマンスを得るために 2 層キャッシュも採用し、RAM を消費せずにコストのかかるダウンロード サイクルを回避するために、ローカル ファイル システムの一時/キャッシュ ディレクトリに保存します。

于 2012-12-06T09:32:03.080 に答える
2

キャッシュされたアイテムがコンポーネント間で共有される可能性がある場合は、統合されたキャッシュを使用することもできます。ルックアップのコストが大幅に増加することはなく、少なくともキャッシュされたオブジェクトの冗長コピーを削減できる可能性があります。

しかし、キャッシュされたアイテムがコンポーネントごとに一意である場合、それらをキャッシュに混在させることは無意味であり、コードの読みやすさの観点から混乱する可能性があります。その場合は、キャッシュを分けておいてください。これにより、コンポーネントをより正確に制御することもできます。たとえば、すぐに使用されないコンポーネントをキャッシュからより積極的に追い出すことができます。

于 2012-12-05T17:44:38.707 に答える