方法

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

对象.

此方法的调用方负责接收返回的数据,并负责释放它。