我正在编写一个程序C
和使用Gtk+
为GUI。一切工作正常,但我有一些疑虑内存泄漏。设置新模型时是否需要释放GtkListStore?
我需要显示元素列表,然后通过搜索栏和按钮过滤此列表。我想如example中所述,使用GtkTreeView
和GtkListStore
。
当执行过滤时,我只需创建一个新的GtkListStore
并用新元素填充它,然后在GtkTreeView
中设置新模型。
我是否需要释放那些我不再使用的模型或将自动处理它吗?
我正在编写一个程序C
和使用Gtk+
为GUI。一切工作正常,但我有一些疑虑内存泄漏。设置新模型时是否需要释放GtkListStore?
我需要显示元素列表,然后通过搜索栏和按钮过滤此列表。我想如example中所述,使用GtkTreeView
和GtkListStore
。
当执行过滤时,我只需创建一个新的GtkListStore
并用新元素填充它,然后在GtkTreeView
中设置新模型。
我是否需要释放那些我不再使用的模型或将自动处理它吗?
声明您使用gtk_tree_view_set_model
来交换模型。
的DocBook gtk_tree_view_set_model()
void gtk_tree_view_set_model (GtkTreeView *tree_view,
GtkTreeModel *model);
设置一个GtkTreeView模型。如果tree_view已经设置了 型号,它将在设置新型号之前将其删除。如果model是NULL,则 然后它将取消旧模型的设置。
因此,这意味着,如果一个模型与视图关联的referece计数器将减少一个(其实我verfied,通过一看入源,文档不够明确这里什么是“删除”的意思) )。
如果作为例子说
/* Create a view */
tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
/* The view now holds a reference. We can get rid of our own
* reference */
g_object_unref (G_OBJECT (store));
你不需要做任何额外除非显式调用g_object_ref
或将增加参考一些其他的方法处理它。
我强烈建议您获取devhelp并安装Gtk+
docbook条目。