Collection<B>があり、アイテムを削除しようとしているとします。最初の図に示すように、のインスタンスBは のインスタンスから参照され、 のインスタンスをA参照します。C
ここで、B を指している参照があったため、オブジェクトが「削除」またはガベージ コレクションされていることに疑問の余地はありません。このようにコレクションから削除されるだけですよね?
ここで、Collection<A>前と同じ参照階層を持つ を作成し、A のインスタンスを削除しましょう。
への他の参照がない場合A、コレクションから削除されるだけでなく、ガベージとしてマークされます。私は正しいですか?そして と はどうBですかC?Bのインスタンスを参照する以外に他の参照がない場合、それらもガベージになりますCか?
これは私が直面していることの単純化です。コレクションからインスタンスを削除したいのですが、それを確認して使用したいと考えています。ABCAが私のコレクションになくなった時点で、まだ生きているすべての「子供」は、私にとってメモリ リークです。
私が作ったこれらの写真を見ると、あまりにもばかげた質問のように思えます. しかし、私の状況は少し些細なことではありません。次のようになります。
- 写真では、Modelレイヤーが黄色、ViewModelレイヤーが緑色
- 「A ViewModel」クラスはその
A Model - にはインスタンスのコレクションがあります (モデル
A Model層とビューモデル層の両方で、 の子のようなものです)B ModelBA - それぞれが
B Model「その親を知っている」 - 親の「A Model」インスタンスを参照する - VMレイヤーに戻ると、「A ViewModel」は「B ViemModel」アイテムのコレクションを保持します
- 優れたViewModelと同様に、「B ViewModel」は「B Model」を参照します
A ViewModelこれらのインスタンスのコレクションがあります。1つを削除すると、他のすべてが必要になります。関連するインスタンスへの「外部参照」が他にない場合 (基本的に、図の外から入ってくる他の矢印はありません)、削除された「A ViewModel」インスタンスはすべての子を取得しますか? もしそうなら、この単純化を誤解させる可能性のある「落とし穴」はありますか? もし私が完全に間違っているとしたら、なぜですか?:)
ここまで読んでくれてありがとう!



