2014-04-05 45 views
1

我正在编写一个程序C和使用Gtk+为GUI。一切工作正常,但我有一些疑虑内存泄漏设置新模型时是否需要释放GtkListStore?

我需要显示元素列表,然后通过搜索栏和按钮过滤此列表。我想如example中所述,使用GtkTreeViewGtkListStore

当执行过滤时,我只需创建一个新的GtkListStore并用新元素填充它,然后在GtkTreeView中设置新模型。

我是否需要释放那些我不再使用的模型或将自动处理它吗?

回答

1

声明您使用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条目。

相关问题