我正在使用 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. a GeneralLedger
我什至删除了 SpendingManager
的继承这样它现在继承自 Object
,但这种情况仍然会发生。
最佳答案
你是如何声明实例
的?
在这种情况下,应该这样声明:
YourSUperClass classInstanceVariables: 'instance'.
也许您做得正确,但从您的帖子中不清楚(并且两个类之间的层次结构也不清楚)。
您的主要问题是使用super new
。
当您第一次创建子类的实例时,它将发送 super new
,这将:
要么返回一个已经初始化的父类(super class)实例
或者将子类的实例注册为父类(super class)单例
您应该使用instance := self basicNew初始化
来代替。
你也可以写整个内容
^instance ifNil: [instance := self basicNew initialize]
另一种可能性是不在子类中重新定义new,来自父类(super class)的new就可以工作。
最后一件事,要删除初始化,只需检查类并直接从编辑器修改“instance”类实例变量(选择此字段,输入 nil 并接受)。
关于Smalltalk - 如何删除内存中的所有内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17417232/