2017-12-26 7 views
1

私は基本的にNSCacheをセットアップし、サブクラス化オブジェクトNSObjectを保存しています。私はこれらのオブジェクトが(メモリデバッガで検証された)1 +その他の強い参照がある場合でも、キャッシュから解放されていることを観察しています(アプリケーションのバックグランド時)。私はここに何かを逃していますか私が理解しているように、NSCacheは、オブジェクトへの参照が残っていない場合にのみ、メモリの圧力下でオブジェクトを解放します。NSCacheはオブジェクトへの強い参照があってもオブジェクトを解放しますか?

答えて

0

私は、NSCacheがオブジェクトを解放するかどうかを確認するためにオーナーシップグラフをトレースしていないことを確認していると思います。は実際にはのメモリを節約します。それはそれ自身のローカルヒューリスティックに基づいてリリースを行います。

この状況では、NSCacheの使用について考えるのは理にかなっているかもしれません。他に強い参照がある場合、キャッシュの所有者はオブジェクトの作成に責任を負いませんか?あなたがキャッシュしようとしているルックアップですか?

オブジェクトの作成には高価ですが、いつでも実行でき、オブジェクトグラフには影響しません。

+1

これは私が発見したものと思われます。これは他の人のために記録する素晴らしい答えです! 私の場合、キャッシュの所有者*はオブジェクトの作成を担当しますが、これらのオブジェクトを作成するだけでなく、メモリコストがかかりますが時間コストがかかります。私はキャッシュを打つ前にチェックしている現在使用中のオブジェクトへの2番目の参照を保持することによって、NSCacheを私のために働かせる方法を発見しました。 – Warpling

+0

メモリ圧迫とバックグラウンド通知を受け取ったときにオブジェクトを追い出すことで構造のような独自のNSCacheを作成するのは簡単ではないようですが、ヒューリスティックとNSDiscardableContentプロトコルはより複雑なケースで役に立ちます。 – Warpling

+0

あまりにも多くの作業をせずにカスタムソリューションを作ることは可能です。私は非常に単純な状況でしか使用していません。私はあなたのために働く何かを見つけてうれしいです! – Matt

関連する問題