4

gtk bin コントロールがあり、それを削除したいと考えています。つまり、ウィンドウだけでなくオペレーティング メモリからも削除する必要があります。window.Remove(child_item) を呼び出すだけでウィンドウから削除していますが、Destroy() または Dispose() またはその両方を呼び出す必要がありますか? どの順番で?

4

1 に答える 1

2

Dispose() は の一部でありGObject、インスタンスのファイナライズ シーケンス中に参照を解放し、シグナル ハンドラをデタッチするために使用されます。参照サイクルの場合は複数回呼び出すことができるため、未設定のフィールドを確認することをお勧めします。

Destroy() は の一部でありGtkWidget、Dispose() 実装と同様の目的を果たします。GObjectDestroy() は、(型システムの残りの部分と共に) GLib に移動する前に、GTK の内部型として始まったという事実の歴史的な成果物です。Destroy() は、 内の Dispose() のデフォルト実装の一部として呼び出されますGtkWidget

コンテナから子を削除したい場合は、コンテナで Remove(child) を呼び出すか、子で Destroy() を呼び出すだけです。それが最後の参照である場合、ウィジェット。で Destroy() を呼び出すとGtkWidget、ウィジェットがその親コン​​テナーから削除されます。2 つのコード パスは交換可能である必要があります。

Dispose() を直接呼び出すことは Gtk# 主義です。Dispose() メソッドは、ほとんどの場合、直接呼び出されるのではなく、オーバーライドされることを意図しています。

于 2013-03-29T19:45:38.323 に答える