Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Smalltalk-如何删除内存中的所有内容?_Smalltalk - Fatal编程技术网

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

Smalltalk-如何删除内存中的所有内容?,smalltalk,Smalltalk,我正在使用Pharo3.0 有没有办法从内存中删除所有对象?我尝试过关闭和重新打开我的图像,但似乎一切都还在记忆中 例如,我有: 总帐->支出管理器,并将两者设置为单件: GeneralLedger>>new instance isNil ifTrue: [instance := super new]. ^ instance SpendingManager>>new instance isNil ifTrue: [instance := supe

我正在使用Pharo3.0

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

例如,我有: 总帐->支出管理器,并将两者设置为单件:

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的情况下发送一些其他类型的黑魔法。