Lór*_*tér 5 java model-view-controller garbage-collection
我想在困难的情况下实现MVC模式.困难在于我的模型(生成事件的实体)是长寿的,而视图(事件的接收者)是短暂的.我的问题是,通过两者之间的连接,长寿模型使我的短暂视图保持活跃,即它们不能被垃圾收集.
[MODEL] ------- <weak> -------> [VIEW]
|
<strong>
|
v
[CONTROLLER]
Run Code Online (Sandbox Code Playgroud)
解决此问题的方法是将模型中的连接存储在WeakHashMap <View,Controller>中.这实际上让View被垃圾收集,当发生这种情况时,WeakHashMap也会抛出相应的Controller.也就是说,如果Controller没有对视图进行(强)引用 - 它通常会这样做.在这种情况下,视图通过强引用保持活动状态,直到模型超出范围.
[MODEL] ------- <weak> -------> [VIEW]
| ^
<strong> |
| |
v |
[CONTROLLER] ----------- <strong> ---/
Run Code Online (Sandbox Code Playgroud)
是否有另一种方法将侦听器连接到我的模型,这些方法不会让我的视图(和控制器)保持活动状态?
更新:回答mdma的问题:Controller保留对View的引用,因为它需要更新View.这个引用可能很弱,但是我想让Controllers成为View类的匿名内部类,在这种情况下,Controller实例具有对View实例的隐式强引用.