2

メモリリークのような問題があります。MATLAB クラスにラップされた jLabel オブジェクトを作成しています。問題やメモリリークを防ぐために、すべてのセット/取得にハンドルを使用しています。

このコードを使用して、jLabel の MouseExitedCallback を設定しています。それはクラスのメソッドです:

function SetMouseExitedCallback (obj, exitcallback)
    set (obj.hLabel, 'MouseExitedCallback', exitcallback)
end

このメソッドは、MouseExitedCallback のコードを実際に含む別のクラスから呼び出されます。そのクラスでは、次のように呼び出されます。

obj.tooltip.SetMouseExitedCallback (@(src, event)obj.MouseExited);

私が得ている問題は、この最後の行を追加すると、プロジェクト内のファイルを編集しようとすると、jLabel クラスがまだメモリ内にあることがわかります。これを防ぐにはどうすればよいですか?

4

1 に答える 1

0

最初に私の考えは入れていました

obj.tooltip.SetMouseExitedCallback ('');

削除(デストラクタ)メソッドでそれを。デストラクタが呼び出されなかったため、それは機能しませんでした。実際には、実際の MouseExited() コールバックが定義されている別のクラスに対しても、デストラクタが呼び出されることはありませんでした。

最後に機能したのは、次を呼び出すことです。

obj.tooltip.SetMouseExitedCallback ('');

ツールチップを非表示にしているメソッドで。Mouse Exited() メソッドと同じクラスで定義されています。次に、アプリケーションが閉じられた後、VM はデストラクタを呼び出してオブジェクトを破棄します。

于 2013-03-01T08:00:55.647 に答える