Gtk.Bin.Destroy()和Gtk.Bin.Dispose()之间有什么区别

时间:2013-03-29 10:04:34

标签: c# gtk

我有一个gtk bin控件,我想删除它。这意味着我需要从操作内存和窗口中删除它。我只是通过调用window.Remove(child_item)从窗口中删除它,但是我应该调用Destroy()或Dispose()还是两者?按哪个顺序?

1 个答案:

答案 0 :(得分:2)

Dispose()是GObject的一部分,它在实例终结序列中用于释放引用和分离信号处理程序;在参考周期的情况下,可以多次调用它,因此检查未设置的字段是一种很好的做法。

Destroy()是GtkWidget的一部分,其作用与Dispose()实现类似; Destroy()几乎是一个历史假象,GObject在被移出(与类型系统的其余部分一起)进入GLib之前作为内部类型的GTK开始。 Destroy()被调用为GtkWidget内的Dispose()的默认实现的一部分。

如果要从容器中删除子项,可以简单地在容器上调用Remove(child),或者在子项上调用Destroy():Remove()将释放子项上的引用,这将导致如果这是最后一个引用,则对窗口小部件进行销毁。在GtkWidget上调用Destroy()将导致窗口小部件从其父容器中删除。两个代码路径应该是可以互换的。

直接调用Dispose()是一个Gtk#-ism:Dispose()方法主要用于覆盖,而不是直接调用。