NSCacheとNSDiscardableContent について
まず、簡単にNSCacheの特徴を述べます。スレッドセーフでお手軽なNSDictionary、ただし要素列挙やカウント機能なしといったところでしょうか。 NSDictionaryのようにkey-value形式でオブジェクトにアクセスできる
スレッドセーフであり、ロック不要で別スレッドから追加、削除、クエリができる
メモリ警告時に自動でオブジェクトをキャッシュから削除する
countLimitとtotalCostLimitという2つの上限値でキャッシュサイズの調節できる
NSCacheでの削除について
NSCacheのキャッシュオブジェクトの削除のタイミングや動作は次のようになっているようです。
countLimitまたはtotalCostLimitを超えたときには、オブジェクトがキャッシュから削除される。
不要なものから優先的に削除される (挙動的にはLRUっぽい) 上限を超えたとしても必ず、即座にキャッシュから削除されるわけではない
メモリ警告時にもオブジェクトをキャッシュから削除する
キャッシュから削除されるときは、オブジェクトが開放可能であるなら実際にdeallocもされる。
キャッシュからオブジェクトが削除される直前に、cache:willEvictObjectが呼ばれる (delegateを設定時)。