2014-04-05 83 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條目。

相關問題