Smalltalk-如何删除内存中的所有内容?
我正在使用Pharo3.0 有没有办法从内存中删除所有对象?我尝试过关闭和重新打开我的图像,但似乎一切都还在记忆中 例如,我有: 总帐->支出管理器,并将两者设置为单件:Smalltalk-如何删除内存中的所有内容?,smalltalk,Smalltalk,我正在使用Pharo3.0 有没有办法从内存中删除所有对象?我尝试过关闭和重新打开我的图像,但似乎一切都还在记忆中 例如,我有: 总帐->支出管理器,并将两者设置为单件: GeneralLedger>>new instance isNil ifTrue: [instance := super new]. ^ instance SpendingManager>>new instance isNil ifTrue: [instance := supe
GeneralLedger>>new
instance isNil ifTrue: [instance := super new].
^ instance
SpendingManager>>new
instance isNil ifTrue: [instance := super new].
^ instance
在实例化开支管理器的过程中,我在某个地方搞砸了,也就是说,我返回了总账的实例,而不是我猜的开支管理器的实例
现在,当我加载图像并尝试对其执行CTRL+p操作时:
spnder:=新的SpendingManager。我得到:
spnder:=新的SpendingManager。将军
我甚至已经从SpendingManager中删除了继承,以便它现在继承自Object,但这种情况仍然存在。您是如何声明实例的
在这种情况下,应这样声明:
YourSUperClass classInstanceVariables: 'instance'.
也许你做得对,但从你的帖子上看还不清楚,两个类之间的层次结构也不清楚
您的主要问题是超级新的使用。
当您第一次创建子类的实例时,它将发送super new,这将:
返回已初始化的超类实例
或者将子类的实例注册为超类singleton
您应该改用instance:=self-basicNew-initialize
你也可以把整件事写下来
^instance ifNil: [instance := self basicNew initialize]
另一种可能就是不要在子类中重新定义new,新的from超类只会起作用
最后,要删除初始化,只需检查类并直接从编辑器中修改“instance”类实例变量选择此字段,键入nil并接受。您是如何声明实例的
在这种情况下,应这样声明:
YourSUperClass classInstanceVariables: 'instance'.
也许你做得对,但从你的帖子上看还不清楚,两个类之间的层次结构也不清楚
您的主要问题是超级新的使用。
当您第一次创建子类的实例时,它将发送super new,这将:
返回已初始化的超类实例
或者将子类的实例注册为超类singleton
您应该改用instance:=self-basicNew-initialize
你也可以把整件事写下来
^instance ifNil: [instance := self basicNew initialize]
另一种可能就是不要在子类中重新定义new,新的from超类只会起作用
最后,要删除初始化,只需检查类并直接从编辑器中修改“instance”类实例变量选择此字段,键入nil并接受。回答得好。我通常会添加一个名为clearInstance的方法,该方法会将singleton变量置零。@DavidBuck评论得不错。我应该补充一点,修改一个对象的唯一方法是发送一条消息,一条你故意创建的消息——clearInstance,或者让一个现有的工具为你发送一条消息instVarAt:put:或者在Inspector的情况下发送一些其他类型的黑魔法。回答得好。我通常会添加一个名为clearInstance的方法,该方法会将singleton变量置零。@DavidBuck评论得不错。我应该补充一点,修改一个对象的唯一方法是发送一条消息,一条你故意创建的消息——clearInstance,或者让一个现有的工具为你发送一条消息instVarAt:put:或者在Inspector的情况下发送一些其他类型的黑魔法。