如何在Squeak中弱引用单个对象

时间:2015-01-27 17:25:21

标签: smalltalk squeak

Squeak Smalltalk支持弱引用的集合,但似乎缺少与Java的WeakReference类直接等效,它支持对单个对象实例的弱引用。 如果我定义了一个具有多个实例变量的对象类,其中一个我想成为弱引用,那么最常用的方法是什么?实例化WeakArray以保存单个引用是否有意义,或者是否有一种我不知道的简单方法?

2 个答案:

答案 0 :(得分:4)

使用WeakArray。

Squeak VM仅将弱引用实现为索引变量,而实例变量始终被强引用。这就是为什么使用单元素WeakArray是正确的做法。

您可以实现自己的单元素WeakReference类,但它不会比WeakArray更有效。

答案 1 :(得分:2)

在撰写本文时,使用标准Squeak图像,没有直接的方法让一个类的一个实例变量变弱,而其他变量保持强大。但是,当前的VM(例如CogVM)配备了Ephemerons,这个概念类似于概念,如果不比简单的弱引用更强大。据我所知,即将出现的SPUR Squeak图像默认会有Ephemerons。

话虽这么说,你可以在Squeak尝试an older implementation of Ephemerons