我正在处理一个大型的应用程序,但是在最佳实践方面遇到了一些问题。
每当用户导航到我们的客户编辑页面时,都会创建一个新的presenter,并设置一个view。客户编辑有一个主presenter和一个主视图。在主视图中还有子视图,这些子视图由主presenter的sub presenter使用。在子presenter中,我在事件总线上注册事件处理程序。
问题是,当用户第二次导航到联系人编辑器时,presenter被再次创建,并且那些事件被再次注册。现在,当事件发生时,它会被处理两次,每个presenter实例一次。
presenter没有被变量持有,但子视图被主视图引用。这种引用是否会使事件处理程序无法被移除?我原本以为,如果该对象被垃圾回收,事件处理程序将被删除。如果不是这种情况,那么我应该从事件总线中注销这些事件处理程序吗?
更新: presenter没有被垃圾回收。 如果我修改代码以删除所有对这些presenter的引用,它们是否会被收集,因此事件处理程序会被移除?