Smalltalk - 如何删除内存中的所有内容?

时间:2013-07-02 04:06:53

标签: smalltalk

我正在使用Pharo 3.0

有没有办法从内存中删除所有对象?我试过关闭并重新打开我的图像,但似乎一切都还在记忆中。

例如,我有: General Ledger --> Spending Manager并将两者设置为单身人士:

GeneralLedger>>new
    instance isNil ifTrue: [instance := super new].
    ^ instance

SpendingManager>>new
    instance isNil ifTrue: [instance := super new].
    ^ instance

并在实例化Spending Manager时在某处乱搞 - 也就是说,我返回了General Ledger的实例,而不是Spending Manager的实例?

现在,当我加载图片并尝试按CTRL + P时: spnder:=SpendingManager new.我明白了:

  

spnder:= SpendingManager new。 GeneralLedger

我甚至已从SpendingManager中移除了继承,因此它现在继承自Object,但这仍然会发生。

1 个答案:

答案 0 :(得分:4)

你是如何宣布instance的?

在这种情况下,应该声明如下:

YourSUperClass classInstanceVariables: 'instance'.

也许你做得不对,但你的帖子不清楚(你的两个班级之间的等级也不清楚)。

您的主要问题是使用super new 当您第一次创建子类的实例时,它将发送super new,它将:

  • 返回已初始化的超类

  • 实例
  • 或将子类的实例注册为超类单例

您应该使用instance := self basicNew initialize代替。

你也可以写完整件事

^instance ifNil: [instance := self basicNew initialize]

另一种可能性就是 NOT 重新定义子类中的new,来自超类的新函数才会起作用。

最后,要删除初始化,只需检查类并直接从编辑器修改'instance'类实例变量(选择此字段,输入nil并接受)。

相关问题