方法
GObjectObjecttake_ref
自 2.70
声明 [源]
GObject*
g_object_take_ref (
GObject* object
)
描述 [源]
如果 object
是浮动的,则将其放空。否则不执行任何操作。
换句话说,此函数将(如果存在)转换一个浮动的引用为完整的引用。
通常,您想使用 g_object_ref_sink()
以自动处理浮动或非浮动引用的正确问题,但有一种特定场景下此函数很有帮助。
此函数有帮助的情况是在创建一个允许用户提供返回 GObject 的回调函数的 API 时。当然,我们肯定希望允许用户从回调中返回非浮动引用(针对返回的对象已经存在的场景)。
同时,一些流行的基于 GObject 的库(如 Gtk)的 API 风格使得,对于新创建的 GObject 实例,如果允许用户返回浮动引用,他们可以省去一些编码。
使用此函数对用户回调的返回值进行处理,使用户能够选择对他们更方便的方式。调用方始终接收一个完整的值引用:要么是最初返回的那个值,要么是已转换成完整引用的浮动引用。
当与在相同 GObject
实例的另一个线程中同时运行的 g_object_ref_sink()
函数结合使用时,此函数会表现出异常的行为。如果 g_object_ref_sink()
首先运行,则效果是将浮动引用转换为硬引用。如果 g_object_take_ref()
首先运行,则结果将是浮动引用转换为硬引用,并在其之上添加一个额外的引用。最好避免这种情况。
自:2.70
此方法对语言绑定不可直接访问。
返回值
类型: GObject
对象
.
此方法的调用方负责接收返回的数据,并负责释放它。 |