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