我正在編寫一個程序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條目。