方法
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 版本起可用。
此方法对于语言绑定不可直接访问。