方法

GObjectObjectadd_toggle_ref

自 2.8

声明 [src]

void
g_object_add_toggle_ref (
  GObject* object,
  GToggleNotify notify,
  gpointer data
)

描述 [src]

通过一个回调函数来增加对象的引用计数,当对象的所有其他引用都释放,或者这是对象的最后一个引用且建立了另一个引用时,会调用该回调。

此功能旨在将object绑定到一个由其他内存管理器管理的代理对象。这通过两个配对的引用来实现:由g_object_add_toggle_ref()添加的强引用,以及对代理对象的反向引用,这可能是一个强引用或弱引用。

设置是这样的:当没有其他对 object 的引用时,仅从 object 到代理对象的反向方向持有弱引用,但是当有其他对 object 的引用时,则持有强引用。当从 object 到代理对象的引用应该从强引用切换为弱引用(is_last_ref 为 true)或从弱引用切换为强引用(is_last_ref 为 false)时,会调用 notify 回调。

由于在调用 g_object_add_toggle_ref() 之前必须持有对象的(正常)引用,所以反向链接的初始状态始终是强引用。

可以为同一个 gobject 添加多个切换引用,但是如果有多个切换引用指向一个对象,则在没有所有其他引用被删除之前,不会通知任意的引用。因此,只有在代理对象中有重要状态时才应该使用切换引用。

请注意,如果在其他线程上取消对象的引用,那么在 g_object_remove_toggle_ref() 之后,notify 可能仍然会被调用,而对象参数可能是一个悬挂指针。如果对象在其他线程上被销毁,你必须自己处理这个问题。

必须通过 g_object_remove_toggle_ref() 释放 g_object_add_toggle_ref()

自 2.8 版本起可用。

此方法对于语言绑定不可直接访问。

参数

notify

类型:GToggleNotify

在这是对象最后一个引用或不再是最后引用时调用的函数。

data

类型:gpointer

传递给 notify 的数据。

参数可以是 NULL
数据由方法调用者拥有。