gtk bin コントロールがあり、それを削除したいと考えています。つまり、ウィンドウだけでなくオペレーティング メモリからも削除する必要があります。window.Remove(child_item) を呼び出すだけでウィンドウから削除していますが、Destroy() または Dispose() またはその両方を呼び出す必要がありますか? どの順番で?
1 に答える
Dispose() は の一部でありGObject
、インスタンスのファイナライズ シーケンス中に参照を解放し、シグナル ハンドラをデタッチするために使用されます。参照サイクルの場合は複数回呼び出すことができるため、未設定のフィールドを確認することをお勧めします。
Destroy() は の一部でありGtkWidget
、Dispose() 実装と同様の目的を果たします。GObject
Destroy() は、(型システムの残りの部分と共に) GLib に移動する前に、GTK の内部型として始まったという事実の歴史的な成果物です。Destroy() は、 内の Dispose() のデフォルト実装の一部として呼び出されますGtkWidget
。
コンテナから子を削除したい場合は、コンテナで Remove(child) を呼び出すか、子で Destroy() を呼び出すだけです。それが最後の参照である場合、ウィジェット。で Destroy() を呼び出すとGtkWidget
、ウィジェットがその親コンテナーから削除されます。2 つのコード パスは交換可能である必要があります。
Dispose() を直接呼び出すことは Gtk# 主義です。Dispose() メソッドは、ほとんどの場合、直接呼び出されるのではなく、オーバーライドされることを意図しています。