4

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

4

1 回答 1

2

Dispose() 是 的一部分GObject,它在实例完成序列期间用于释放引用和分离信号处理程序;它可以被多次调用,以防引用循环,因此检查未设置的字段是一个好习惯。

Destroy() 是 的一部分GtkWidget,其目的与 Dispose() 实现类似;Destroy() 几乎是一个历史产物,它GObject作为 GTK 的内部类型开始,然后被移出(与类型系统的其余部分一起)到 GLib 中。Destroy() 作为 Dispose() inside 的默认实现的一部分被调用GtkWidget

如果你想从容器中移除一个子容器,你可以简单地调用容器上的 Remove(child),或者调用子容器上的 Destroy():Remove() 将释放持有在子容器上的引用,这将导致销毁小部件,如果那是最后一个引用。在 a 上调​​用 Destroy()GtkWidget将导致小部件从其父容器中删除。这两个代码路径应该是可互换的。

直接调用 Dispose() 是 Gtk#-ism: Dispose() 方法主要是为了被覆盖,而不是直接调用。

于 2013-03-29T19:45:38.323 回答