![](/img/trans.png)
[英]Android MVP - loosing view reference in presenter “NullPointerException… null object reference”
[英]Java MVP - holding no reference to Presenter object?
因此,我正在使用MVP模式编写第一个Java应用程序。 MVP三合会之一是单向通信,基本上,Views是只读的。
如果只有1个模型-1个演示者-1个视图,那么在创建新的演示者对象并且不在模型的“观察者”列表之外的任何地方都没有保留对它的引用会有任何回溯吗?
为了使自己清楚,这就是我通常会做的事情:
private Result result;
private ResultPresenter resultPresenter;
public SomePresenter(SomeInterface view) {
result = new Result();
resultPresenter = new ResultPresenter(result, view.getResultView());
}
这就是我要这样做的方式:
private Result result;
public SomePresenter(SomeInterface view) {
result = new Result();
new ResultPresenter(result, view.getResultView());
}
其中ResultPresenter是结果的观察者。
主要问题是,垃圾收集器会清除ResultPresenter吗?
除其他外(例如初始化视图), ResultPresenter
会实例化或实现一个或多个观察者,并在“结果”和“结果视图”两者上注册它们。 然后,这些类将保存对观察者的引用,并根据需要通知它们。
有几种方法可以做到这一点,常见的模式是匿名内部类 。 由于那些匿名内部类仍保留对其实例化器的引用,因此不会对ResultPresenter
进行垃圾收集。
另一种选择是将顶级类实例化为观察者。 在这种情况下,是否仍然引用演示者取决于观察者的实现。
最后,演示者本身可以实现观察者的界面(在思想上不知所措)。 显然,模型和视图将保留对演示者本身的引用,尽管他们将其视为观察者,并且不会被垃圾收集。
即使这样做,也仅意味着您只需要它即可设置演示文稿并将对象彼此链接,并且以后不再需要它,因此不会造成任何危害。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.