GTK 2 中的免费对象/小部件?

问题描述 投票:0回答:1

我的 GTK 2 应用程序中有一个包盒,我每隔一段时间就会用一个全新的条目替换它(至少现在是这样,因为我很着急)。

由于我要用新实例替换它,我是否需要显式地从内存中释放旧包盒内容,或者 GTK 中是否有一些垃圾收集?

如果我确实需要明确需要释放对象,是否有一个命令可以递归地访问该树中的所有对象(就像它会清除主包盒内盒容器中的按钮一样)?另外,连接到对象的信号和处理程序怎么样?

我正在使用 C/GTK-2.0(gcc v4.4.3 和 GTK 2.20.0)。

c gtk2
1个回答
10
投票

GObject 是引用计数的。当您将小部件打包到容器中时,容器将接管所有权。

当您执行

gtk_container_remove()
时,容器所持有的引用将被删除,这通常会导致小部件被销毁。

所以不,您不需要显式销毁它,只需将其从容器中删除就足够了。

gtk_container_remove() API 的

文档
还表示,直接在子进程上调用
gtk_widget_destroy()
会更高效,所以如果您已经这样做了,那就没问题了。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.