継承した大規模なアプリケーションで作業しており、いくつかのベストプラクティスの問題が発生しています。
ユーザーがカスタマー編集ページに移動するたびに、新しいプレゼンターが作成され、ビューが設定されます。顧客編集用のメインプレゼンターとメインビューがあります。メインプレゼンターのサブプレゼンターが使用するサブビューもメインビュー内にあります。サブプレゼンター内で、イベントバスにイベントハンドラーを登録します。
私が抱えている問題は、連絡先エディターに2回移動すると、プレゼンターが再度作成され、それらのイベントが再度登録されることです。これで、イベントが発生すると、プレゼンターインスタンスごとに1回ずつ、2回処理されます。
プレゼンターは変数によって保持されませんが、サブビューはメインビューによって参照されます。ビュー内のこの参照が、イベントハンドラーの削除を妨げている可能性がありますか?そのオブジェクトがガベージコレクションされた場合、イベントハンドラーが削除されるという印象を受けました。そうでない場合は、これらのイベントハンドラーをイベントバスから登録解除する必要がありますか?
更新:プレゼンターはガベージコレクションされていません。コードを変更して、それらのプレゼンターへのすべての参照が不要になったときにそれらを削除できる場合、それらは収集されるので、イベントハンドラーは削除されますか?