私は基本的にNSCache
をセットアップし、サブクラス化オブジェクトNSObject
を保存しています。私はこれらのオブジェクトが(メモリデバッガで検証された)1 +その他の強い参照がある場合でも、キャッシュから解放されていることを観察しています(アプリケーションのバックグランド時)。私はここに何かを逃していますか私が理解しているように、NSCache
は、オブジェクトへの参照が残っていない場合にのみ、メモリの圧力下でオブジェクトを解放します。NSCacheはオブジェクトへの強い参照があってもオブジェクトを解放しますか?
1
A
答えて
0
私は、NSCacheがオブジェクトを解放するかどうかを確認するためにオーナーシップグラフをトレースしていないことを確認していると思います。は実際にはのメモリを節約します。それはそれ自身のローカルヒューリスティックに基づいてリリースを行います。
この状況では、NSCacheの使用について考えるのは理にかなっているかもしれません。他に強い参照がある場合、キャッシュの所有者はオブジェクトの作成に責任を負いませんか?あなたがキャッシュしようとしているルックアップですか?
オブジェクトの作成には高価ですが、いつでも実行でき、オブジェクトグラフには影響しません。
関連する問題
- 1. 複数参照オブジェクトの解放
- 2. 別のオブジェクトへの参照によってオブジェクトを渡す
- 3. Page Page Modelへの参照があり、PageModelにはページへの参照が戻っています。記憶は解放されるのだろうか?
- 4. 自動解放プールのオブジェクトはどのように参照されますか?
- 5. NSMutableArrayを持っていれば、すべてのオブジェクトも解放する必要がありますか?
- 6. 他のオブジェクトを参照に割り当てる前にインスタンスオブジェクトを解放する必要はありますか?
- 7. nettyで参照カウントのByteBufオブジェクトを正しく解放します。4.1
- 8. はremoveFromSuperviewオブジェクトを解放しますか?
- 9. インスタンス変数が別の変数への参照であっても、オブジェクトはGCに適格ですか?
- 10. GraphQL相互参照がエラーをスロー:フィールドタイプは、出力タイプであってもよいが持っている必要があります。[オブジェクトのオブジェクト]を
- 11. System.arrayCopy()はオブジェクトまたはオブジェクトへの参照をコピーしますか?
- 12. viewDidUnloadのオブジェクトを解放しますか?
- 13. DOMオブジェクトへのJSオブジェクトの参照
- 14. アプリケーションを終了する直前にオブジェクトを解放し(したがってオブジェクトを解放する必要があるのはなぜですか?
- 15. 隠しオブジェクトを解放しますか?
- 16. 弱い参照がゼロになっても、オブジェクトの割り当てが解除されていません
- 17. swift:ARC:UIImageへのすべての参照を解放する方法
- 18. Raphaelオブジェクトへの参照
- 19. "プロシージャにオブジェクトdbo.sysssislogへの参照が未解決です"
- 20. C#:他のオブジェクトを参照しないでオブジェクト間の強い参照を作成する
- 21. どのオブジェクトが同じオブジェクトへの参照を持っているかを知るには(デバッグモードで)?
- 22. オブジェクトを直列化解除した後、オブジェクトが他のオブジェクトを参照しないのはなぜですか?
- 23. NSMutableArrayのオブジェクトを解放する必要がありますか?
- 24. XMLHttpRequestオブジェクトを解放する方法と、ActiveXObject( "Microsoft.XMLHTTP")オブジェクトを解放する方法はありますか?
- 25. 強参照オブジェクトのOutOfMemoryエラーがありません - なぜですか?
- 26. 参照オブジェクトによって渡された変数への参照オブジェクトの受け渡し
- 27. ガベージコレクタが解放しているオブジェクトを確認します。
- 28. オブジェクト参照がオブジェクトを使用していなくてもオブジェクトのインスタンスに設定されていない
- 29. 子オブジェクトの親オブジェクトを参照しています
- 30. 参照できないオブジェクトのガベージコレクションを強制するには?
これは私が発見したものと思われます。これは他の人のために記録する素晴らしい答えです! 私の場合、キャッシュの所有者*はオブジェクトの作成を担当しますが、これらのオブジェクトを作成するだけでなく、メモリコストがかかりますが時間コストがかかります。私はキャッシュを打つ前にチェックしている現在使用中のオブジェクトへの2番目の参照を保持することによって、NSCacheを私のために働かせる方法を発見しました。 – Warpling
メモリ圧迫とバックグラウンド通知を受け取ったときにオブジェクトを追い出すことで構造のような独自のNSCacheを作成するのは簡単ではないようですが、ヒューリスティックとNSDiscardableContentプロトコルはより複雑なケースで役に立ちます。 – Warpling
あまりにも多くの作業をせずにカスタムソリューションを作ることは可能です。私は非常に単純な状況でしか使用していません。私はあなたのために働く何かを見つけてうれしいです! – Matt