设置新模型时是否需要释放GtkListStore?

时间:2014-04-05 10:19:31

标签: c model gtk free gtk3

我正在C编写一个程序,并使用Gtk+作为GUI。一切正常,但我对可能的内存泄漏有疑问。

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

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

我是否需要释放我不再使用的模型或Gtk+会自动处理它?<​​/ strong>

1 个答案:

答案 0 :(得分: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,   然后它将取消旧模型。

所以这意味着如果一个模型与视图相关联,它的引用计数器将减少一个(我实际上通过查看源代码来证实,文档在这里不够明确&#34;删除&#34;装置))。

如果你按照例子说的那样处理它

   /* 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条目。