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

标签 smalltalk

我正在使用 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/

相关文章:

singleton - Smalltalk 单例模式 : how do I initialize the instance variables?

compiler-construction - 新动态编程语言的后端选择?

oop - 继承方法调用设计问题

reflection - Pharo:如何比较不同检查员的对象?

documentation - 为什么 Squeak 使用颜色来识别鼠标按钮?

smalltalk - 如何在 Dolphin Smalltalk 中创建 SUnit 测试?

ruby - 对象私有(private)与类私有(private)

namespaces - Squeak 是否支持命名空间?

smalltalk - 如何配置 Seaside 3.2 session 超时(年龄)

reflection - 在 Squeak 中,我在哪里可以找到消息处理算法的代码?