方法

声明 [源]

GVariant*
g_variant_take_ref (
  GVariant* value
)

描述 [源]

如果 value 是浮动的,则消耗它。否则,什么也不做。

通常您想使用 g_variant_ref_sink() 以自动处理浮点或非浮点引用的正确方式,但有一个特定场景下这个函数很有用。

这个函数有帮助的情况是在创建一个允许用户提供返回 GVariant 的回调函数的 API。我们当然希望允许用户从回调函数返回非浮点引用的灵活性(在这种情况下,返回的值已经存在)。

同时,GVariant API 的风格使得对于新创建的 GVariant 实例,如果允许返回带有浮点引用的 GVariant,则用户可以节省一些打字。

在使用此函数处理用户回调的返回值时,用户可以选择对他们来说更方便的方式。调用者将始终接收到一个完整的引用值:要么是最初返回的那个值,要么是将浮动的引用转换为一个完全的引用。

当与其他线程中的相同 GVariant 实例上的 g_variant_ref_sink() 同时运行时,此函数的交互有些奇怪。如果先运行 g_variant_ref_sink(),则结果将是浮动的引用被转换为一个硬引用。如果先运行 g_variant_take_ref(),则结果将是浮动的引用被转换为一个硬引用,并在上面增加一个额外的引用。最好避免这种情况。

返回值

类型: GVariant

相同的 value

方法的调用者负责获取返回数据的所有权,并且对其进行释放。