我正在使用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
,但这仍然会发生。
答案 0 :(得分:4)
你是如何宣布instance
的?
在这种情况下,应该声明如下:
YourSUperClass classInstanceVariables: 'instance'.
也许你做得不对,但你的帖子不清楚(你的两个班级之间的等级也不清楚)。
您的主要问题是使用super new
当您第一次创建子类的实例时,它将发送super new
,它将:
返回已初始化的超类
或将子类的实例注册为超类单例
您应该使用instance := self basicNew initialize
代替。
你也可以写完整件事
^instance ifNil: [instance := self basicNew initialize]
另一种可能性就是 NOT 重新定义子类中的new,来自超类的新函数才会起作用。
最后,要删除初始化,只需检查类并直接从编辑器修改'instance'类实例变量(选择此字段,输入nil并接受)。