gpt4 book ai didi

c# - Gtk.Bin.Destroy() 和 Gtk.Bin.Dispose() 有什么区别

转载 作者:行者123 更新时间:2023-11-30 12:30:38 25 4
gpt4 key购买 nike

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

最佳答案

Dispose() 是 GObject 的一部分,它在实例终结序列中用于释放引用和分离信号处理程序;它可以被调用多次,以防引用循环,所以检查未设置的字段是一个很好的做法。

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

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

直接调用 Dispose() 是一种 Gtk# 主义:Dispose() 方法主要用于重写,而不是直接调用。

关于c# - Gtk.Bin.Destroy() 和 Gtk.Bin.Dispose() 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15701109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com