Squeak Smalltalk支持弱引用的集合,但似乎缺少与Java的WeakReference类直接等效,它支持对单个对象实例的弱引用。 如果我定义了一个具有多个实例变量的对象类,其中一个我想成为弱引用,那么最常用的方法是什么?实例化WeakArray以保存单个引用是否有意义,或者是否有一种我不知道的简单方法?
答案 0 :(得分:4)
使用WeakArray。
Squeak VM仅将弱引用实现为索引变量,而实例变量始终被强引用。这就是为什么使用单元素WeakArray是正确的做法。
您可以实现自己的单元素WeakReference类,但它不会比WeakArray更有效。
答案 1 :(得分:2)
在撰写本文时,使用标准Squeak图像,没有直接的方法让一个类的一个实例变量变弱,而其他变量保持强大。但是,当前的VM(例如CogVM)配备了Ephemerons,这个概念类似于概念,如果不比简单的弱引用更强大。据我所知,即将出现的SPUR Squeak图像默认会有Ephemerons。
话虽这么说,你可以在Squeak尝试an older implementation of Ephemerons。