2

我正在使用 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 新。总账

我什至删除了继承 fromSpendingManager以便它现在继承 from Object,但这仍然会发生。

4

1 回答 1

4

你是怎么申报的instance

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

YourSUperClass classInstanceVariables: 'instance'.

也许你做对了,但你的帖子并不清楚(你的两个类之间的层次结构也不清楚)。

您的主要问题是super new.
当您第一次创建子类的实例时,它将发送super new以下内容:

  • 要么返回一个已经初始化的超类实例

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

你应该instance := self basicNew initialize改用。

你也可以写整件事

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

另一种可能性是不要在子类中重新定义 new,来自超类的 new 将正常工作。

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

于 2013-07-02T07:52:07.590 回答