方法

GObjectObjectsteal_qdata

声明 [源]

gpointer
g_object_steal_qdata (
  GObject* object,
  GQuark quark
)

描述 [源]

此函数检索通过 g_object_set_qdata() 存储的用户数据指针,并从对象中删除 data,而不会调用其 destroy() 函数(如果有)。通常,调用此函数只是为了使用 destroy 通知器来更新用户数据指针,例如

void
object_add_to_user_list (GObject     *object,
                         const gchar *new_string)
{
  // the quark, naming the object data
  GQuark quark_string_list = g_quark_from_static_string ("my-string-list");
  // retrieve the old string list
  GList *list = g_object_steal_qdata (object, quark_string_list);

  // prepend new string
  list = g_list_prepend (list, g_strdup (new_string));
  // this changed 'list', so we need to set it again
  g_object_set_qdata_full (object, quark_string_list, list, free_string_list);
}
static void
free_string_list (gpointer data)
{
  GList *node, *list = data;

  for (node = list; node; node = node->next)
    g_free (node->data);
  g_list_free (list);
}

在上面的示例中,使用 g_object_get_qdata() 而不是 g_object_steal_qdata() 将会保留已设置的 destroy 函数,因此部分字符串列表将在

参数

quark

类型: GQuark

一个 GQuark,命名用户数据指针。

返回值

类型: gpointer

设置的用户数据指针,或 NULL

方法的调用者拥有返回的数据,并负责释放它。
返回值可以是 NULL