问题描述
GLib 中有两个函数可以处理 GObject 对象的引用计数:
既然我们不知道对象是否浮动,我们应该总是使用g_object_ref_sink
,不是吗?如果我错了,我们什么时候应该使用g_object_ref
,什么时候应该使用g_object_ref_sink
?我们应该只对 g_object_ref_sink
对象使用 GInitiallyUNowned
吗?
解决方法
您通常应该知道您正在处理的对象的类型(即指针通常具有比 GObject*
更具体的类型),以便您知道它是否可能是浮动的。使用浮动引用的基于 GObject 的 API 被记录为使用它们。任何未记录为使用浮动引用的内容都不会。