我的 GTK 2 应用程序中有一个包盒,我每隔一段时间就会用一个全新的条目替换它(至少现在是这样,因为我很着急)。
由于我要用新实例替换它,我是否需要显式地从内存中释放旧包盒内容,或者 GTK 中是否有一些垃圾收集?
如果我确实需要明确需要释放对象,是否有一个命令可以递归地访问该树中的所有对象(就像它会清除主包盒内盒容器中的按钮一样)?另外,连接到对象的信号和处理程序怎么样?
我正在使用 C/GTK-2.0(gcc v4.4.3 和 GTK 2.20.0)。
GObject 是引用计数的。当您将小部件打包到容器中时,容器将接管所有权。
当您执行
gtk_container_remove()
时,容器所持有的引用将被删除,这通常会导致小部件被销毁。
所以不,您不需要显式销毁它,只需将其从容器中删除就足够了。
gtk_container_remove()
API 的
文档还表示,直接在子进程上调用
gtk_widget_destroy()
会更高效,所以如果您已经这样做了,那就没问题了。