2

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. 総勘定元帳

からの継承を削除して、から継承するSpendingManagerようにしましObjectたが、これはまだ発生します。

4

1 に答える 1

4

どのように宣言しましたinstanceか?

そのような場合は、次のように宣言する必要があります。

YourSUperClass classInstanceVariables: 'instance'.

多分あなたはそれを正しくやったかもしれませんが、あなたの投稿からは不明確です (そして、2 つのクラス間の階層も不明確です)。

あなたの主な問題は、の使用ですsuper new
サブクラスのインスタンスを初めて作成すると、次のものが送信super newされます。

  • スーパークラスのすでに初期化されたインスタンスを返す

  • または、サブクラスのインスタンスをスーパークラスのシングルトンとして登録します

instance := self basicNew initialize代わりに使用する必要があります。

また、あなたはすべてを書くことができます

^instance ifNil: [instance := self basicNew initialize]

他の可能性は、サブクラスで new を再定義しないことです。スーパークラスからの new は機能します。

最後に、初期化を削除するには、クラスを調べて、「インスタンス」クラスのインスタンス変数をエディターから直接変更します (このフィールドを選択し、nil と入力して受け入れます)。

于 2013-07-02T07:52:07.590 に答える