方法
声明 [源]
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
。
方法的调用者负责获取返回数据的所有权,并且对其进行释放。 |