我有一个gtk bin控件,我想删除它。这意味着我需要从操作内存和窗口中删除它。我只是通过调用window.Remove(child_item)从窗口中删除它,但是我应该调用Destroy()或Dispose()还是两者?按哪个顺序?
答案 0 :(得分:2)
Dispose()是GObject
的一部分,它在实例终结序列中用于释放引用和分离信号处理程序;在参考周期的情况下,可以多次调用它,因此检查未设置的字段是一种很好的做法。
Destroy()是GtkWidget
的一部分,其作用与Dispose()实现类似; Destroy()几乎是一个历史假象,GObject
在被移出(与类型系统的其余部分一起)进入GLib之前作为内部类型的GTK开始。 Destroy()被调用为GtkWidget
内的Dispose()的默认实现的一部分。
如果要从容器中删除子项,可以简单地在容器上调用Remove(child),或者在子项上调用Destroy():Remove()将释放子项上的引用,这将导致如果这是最后一个引用,则对窗口小部件进行销毁。在GtkWidget
上调用Destroy()将导致窗口小部件从其父容器中删除。两个代码路径应该是可以互换的。
直接调用Dispose()是一个Gtk#-ism:Dispose()方法主要用于覆盖,而不是直接调用。