2012-05-08 1 views
7

NSCacheオブジェクトは、キャッシュされたデータを保持するために生き続ける必要があります。つまり、データの格納に使用されたのと同じオブジェクトを使用してデータを取得する必要があります。Objective-c - 静的なNSMutableDictionaryに対してNSCacheを使用する利点?

  • 私のデータを保持するシングルトンのNSDictionaryよりもNSCacheを使用することのポイントは何ですか?
  • NSCacheを使用する好ましい方法は何ですか?静的フィールド?それを継承し、シングルトンを作成しますか?

答えて

19

キャッシュには、汎用コレクションとしての使用には適していないが、キャッシュとして機能するようにいくつかの癖があります。ドキュメントに記載されているように:

NSCacheオブジェクトはいくつかの方法で、他の可変のコレクションとは異なります。

  • NSCacheクラスは、それはあまりにも多くのを使用していないことを確認する様々な自動削除ポリシーを組み込んシステムのメモリ他のアプリケーションによってメモリが必要な場合は、これらのポリシーが自動的に実行されます。これらのポリシーを呼び出すと、キャッシュからいくつかの項目が削除され、メモリの占有量が最小限に抑えられます。
  • キャッシュ内の項目を別のスレッドから追加、削除、およびクエリすることができます。キャッシュをロックする必要はありません。
  • NSCacheオブジェクトから何かを取得すると、自動解放された結果が返されます。
  • NSMutableDictionaryオブジェクトとは異なり、キャッシュは、NSMutableDictionaryオブジェクトに置かれたキーオブジェクトをコピーしません。

これらの機能はNSCacheクラスにとって必要です。メモリを解放するために呼び出された場合、キャッシュが自動的に非同期的に自動的に変更することがあるためです。

+0

"AssertEqualObjects"アサーションは、NSCacheの2つの別個のしかし空のインスタンスでは動作しません –

関連する問題