GObjectObject

描述 [src]

class GObject.Object : GObject.TypeInstance
{
  /* No available fields */
}

基础对象类型。

GObject 是基本类型,可为所有 GTK、Pango 和基于 GObject 的其他库中的对象类型提供通用属性和方法。GObject 类提供了用于对象构建和销毁的方法、属性访问方法和信号支持。[此处][gobject-Signals] 详细描述了信号。

有关实现新 GObject 类的教程,请参阅 如何定义和实现新 GObject。有关 GObjects 及其方法的命名约定的列表,请参阅 GType 约定。有关 GObject 背后的高级概念,请阅读 可实例化的类类型:对象

自 GLib 2.72 以来,所有 GObject 均保证对齐到至少是最大基本 GLib 类型的对齐(通常是 guint64gdouble)。如果你需要 GObject 中的元素更大对齐,应在堆上分配它(已对齐),或安排你的 GObject 进行适当填充。此保证适用于 GObject(或衍生)结构、GObjectClass(或衍生)结构,以及 G_ADD_PRIVATE() 分配的任何私有数据。

构造函数

g_object_new

创建新 GObject 子类型的实例及其属性。

g_object_new_valist

创建新 GObject 子类型的实例及其属性。

g_object_new_with_properties

创建新 GObject 子类型的实例,并使用提供的数组设置其属性。这两个数组都必须恰好包含 n_properties 个元素,而名称和值按索引对应。

自:2.54

g_object_newv

创建新 GObject 子类型的实例及其属性。

已弃用:2.54 

函数

g_object_compat_control
无可用说明。

g_object_interface_find_property

查找具有指定名称的 GParamSpec 以用于一个接口。通常,作为 g_iface 传递的接口 vtable 将是 g_type_default_interface_ref() 的默认 vtable,或如果你知道该接口已加载,则可能是 g_type_default_interface_peek()。

自:2.4

g_object_interface_install_property

向一个接口添加一个属性;这仅适用于添加到 GObject 衍生类型中的接口。向一个接口添加属性会强制带有该接口的所有对象类拥有一个兼容的属性。兼容的属性可以是新创建的 GParamSpec,但通常会使用 g_object_class_override_property(),以便对象类仅需要提供实现,并从接口属性继承属性说明、默认值、范围等。

自:2.4

g_object_interface_list_properties

列出接口的属性。通常,作为 g_iface 传递的接口 vtable 将是 g_type_default_interface_ref() 的默认 vtable,或如果你知道该接口已加载,则可能是 g_type_default_interface_peek()。

自:2.4

实例方法

g_object_add_toggle_ref

将对象的引用计数增加一,并设置一个回调函数,该回调函数在对该对象的全部其他引用被删除,或当该引用已经是最后一个对对象的引用且建立了另一个引用时被调用。

自:2.8

g_object_add_weak_pointer

object 中的弱引用添加弱引用,以指示位于 weak_pointer_location 的指针仅在 object 的生命周期内有效。在 object 结束时,weak_pointer 设置为 NULL

g_object_bind_property

source 上的 source_propertytarget 上的 target_property 之间创建绑定。

since: 2.26

g_object_bind_property_full

g_object_bind_property() 的完整版本。

since: 2.26

g_object_bind_property_with_closures

source 上的 source_propertytarget 上的 target_property 之间创建绑定,允许您设置该绑定使用的转换函数。

since: 2.26

g_object_connect

用于同时连接多个信号的便捷函数。

g_object_disconnect

用于同时断开多个信号的便捷函数。

g_object_dup_data

这是 g_object_get_data() 的一个变体,它返回一个值的“副本”。dup_func 在此上下文中定义“副本”的含义,例如,它可以引用一个引用计数的对象。

since: 2.34

g_object_dup_qdata

这是 g_object_get_qdata() 的一个变体,它返回一个值的“副本”。dup_func 在此上下文中定义“副本”的含义,例如,它可以引用一个引用计数的对象。

since: 2.34

g_object_force_floating

此功能适用于 GObject 实现以重新强制 [floating][floating-ref] 对象引用。很少需要执行此操作:所有 GInitiallyUnowneds 都是使用浮动引用创建的,通常只需通过调用 g_object_ref_sink() 将其下沉即可。

since: 2.10

g_object_freeze_notify

增加 object 上的冻结计数。如果冻结计数不为零,则停止发送 object 上的“通知”信号。这些信号将排队,直到冻结数减少到零。重复的通知会被压缩,这样在对象被冻结时,最多会为每个修改的属性发送一个 GObject::notify 信号。

g_object_get

获取对象的属性。

g_object_get_data

从对象的关联表中获取命名字段(参见 g_object_set_data())。

g_object_get_property

获取对象的属性。

g_object_get_qdata

此功能通过 g_object_set_qdata() 存储回用户数据指针。

g_object_get_valist

获取对象的属性。

g_object_getv

获取对象 n_properties 个属性。获取的属性将设置为 values。所有属性必须有效。如果传入无效属性,将发出警告并可能导致未定义的行为。

自:2.54

g_object_is_floating

检查 object 是否具有 [floating][floating-ref] 引用。

since: 2.10

g_object_notify

针对 object 上的属性 property_name 发送“通知”信号。

g_object_notify_by_pspec

针对 object 上由 pspec 指定的属性发送“通知”信号。

since: 2.26

g_object_ref

增加 object 的引用计数。

g_object_ref_sink

增加 object 的引用计数,如果 object 有浮动引用,可能会删除 [floating][floating-ref] 引用。

since: 2.10

g_object_remove_toggle_ref

移除通过 g_object_add_toggle_ref() 添加的引用。对象的引用计数减少一个。

自:2.8

g_object_remove_weak_pointer

移除以前使用 g_object_add_weak_pointer() 添加的 object 中的弱引用。weak_pointer_location 必须与 g_object_add_weak_pointer() 一起使用。

g_object_replace_data

object 上键 key 的用户数据与 oldval 进行比较,如果它们相同,则用 newval 替换 oldval

since: 2.34

g_object_replace_qdata

object 上键 quark 的用户数据与 oldval 进行比较,如果它们相同,则用 newval 替换 oldval

since: 2.34

g_object_run_dispose

释放对其他对象的全部引用。这可用于打破引用循环。

g_object_set

在对象上设置属性。

g_object_set_data

每个对象都包含一张从字符串到指针的关联表。此函数可让你设定关联。

g_object_set_data_full

如同“g_object_set_data()”,但当关联遭毁时会增加通知,无论是设定为不同的值或在对象遭到毁坏时。

g_object_set_property

在对象上设置属性。

g_object_set_qdata

这会在对象上设置不透明命名的指针。名称透过“GQuark”指定(例如透过 g_quark_from_static_string() 检索),指针可使用“g_object_get_qdata()”从“object”取得,直到在“object”被完成为止。设定先前设定的使用者资料指针会覆盖(释放)旧指针设定,基本上将“NULL”设为指针将会移除所储存的数据。

g_object_set_qdata_full

该函数的工作原理类似于 g_object_set_qdata(),但除此之外,可以指定当“object”被完成或“data”被调用具有相同“quark”的 g_object_set_qdata() 覆盖时,将“data”作为参数传递给 void (*destroy) (gpointer) 函数。

g_object_set_valist

在对象上设置属性。

g_object_setv

设置“object”的“n_properties”属性。要设置的属性将从“values”取出。所有属性都必须有效。如果传递了无效的属性,将发出警告,并且可能会出现未定义的行为。

自:2.54

g_object_steal_data

从对象的资料关联中移除特定的资料,不用呼叫关联的“destroy”处理程序。

g_object_steal_qdata

此函数取回透过 g_object_set_qdata() 储存的使用者资料,并且不用呼叫其“destroy()”函数(如果有的)从物件中移除“资料”。通常,仅需要呼叫此函数来更新具有摧毁通知的使用者资料指针,例如:.

g_object_take_ref

如果“object”是浮动的,则将其锁定。否则,什么都不做。

since: 2.70

g_object_thaw_notify

还原对 g_object_freeze_notify() 先前呼叫的效果。冻结计数“object”减少,并且当它达到零时,排队的“notify”信号会发出。

g_object_unref

减少“object”的引用计数。当其引用计数降至 0 时,对象就会被完成(即释放其记忆体)。

g_object_watch_closure

此函数基本上将“closure”的生命周期限制在物件的生命周期内。也就是说,当物件完成时,“closure”透过呼叫 g_closure_invalidate() 使之无效,以防止用已完成(不存在)的物件来呼叫“closure”。另外,“g_object_ref()”和“g_object_unref()”被加入为 marshal 保护程序至“closure”,以确保在“closure”呼叫时,在“object”保持额外的引用计数。通常,此函数会被呼叫使用此“object”作为“closure”资料的“closures”。

g_object_weak_ref

向对象添加弱引用回调。弱引用用于在处置对象时通知。它们被称为“弱引用”,因为它们允许你安全地持有对象指针,而不需呼叫“g_object_ref()”(g_object_ref() 添加了强引用,也就是说,强制对象存在)。

g_object_weak_unref

移除至对象的弱引用回调。

信号

GObject.Object::notify

当对象其中一个属性的值透过 g_object_set_property()、 g_object_set() 等设定时,会发出的 notify 信号。

类结构

struct GObjectObjectClass {
  GTypeClass g_type_class;
  GObject* (* constructor) (
    GType type,
    guint n_construct_properties,
    GObjectConstructParam* construct_properties
  );
  void (* set_property) (
    GObject* object,
    guint property_id,
    const GValue* value,
    GParamSpec* pspec
  );
  void (* get_property) (
    GObject* object,
    guint property_id,
    GValue* value,
    GParamSpec* pspec
  );
  void (* dispose) (
    GObject* object
  );
  void (* finalize) (
    GObject* object
  );
  void (* dispatch_properties_changed) (
    GObject* object,
    guint n_pspecs,
    GParamSpec** pspecs
  );
  void (* notify) (
    GObject* object,
    GParamSpec* pspec
  );
  void (* constructed) (
    GObject* object
  );
  
}

GObject 类型的类结构。

// Example of implementing a singleton using a constructor.
static MySingleton *the_singleton = NULL;

static GObject*
my_singleton_constructor (GType                  type,
                          guint                  n_construct_params,
                          GObjectConstructParam *construct_params)
{
  GObject *object;
  
  if (!the_singleton)
    {
      object = G_OBJECT_CLASS (parent_class)->constructor (type,
                                                           n_construct_params,
                                                           construct_params);
      the_singleton = MY_SINGLETON (object);
    }
  else
    object = g_object_ref (G_OBJECT (the_singleton));

  return object;
}
类成员
g_type_class: GTypeClass

父类。

constructor: GObject* (* constructor) ( GType type, guint n_construct_properties, GObjectConstructParam* construct_properties )

在设置所有构造属性后,g_object_new () 调用 constructor 函数完成对象初始化。constructor 实现必须做的第一件事是链接到父类的 constructor。很少需要覆盖 constructor,例如为了处理构造属性或实现单例。

set_property: void (* set_property) ( GObject* object, guint property_id, const GValue* value, GParamSpec* pspec )

此类型所有属性的通用设置器。应针对具有属性的每种类型覆盖此设置器。如果 set_property 的实现不显式发出属性更改通知,则类型系统会隐式执行此操作。但是,如果显式发出通知信号,则类型系统不会再次发出该信号。

get_property: void (* get_property) ( GObject* object, guint property_id, GValue* value, GParamSpec* pspec )

此类型所有属性的通用读取器。应为具有属性的每种类型覆盖此读取器。

dispose: void (* dispose) ( GObject* object )

dispose 函数应删除对其他所有对象的引用,但保持实例的其他完整性,以便客户端方法调用仍然有效。它可运行多次(由于引用循环)。返回之前,dispose 应链接到父类的 dispose 方法。

finalize: void (* finalize) ( GObject* object )

实例完成函数,应完成在 dispose 中开始的实例完成,并链接到父类的 finalize 方法。

dispatch_properties_changed: void (* dispatch_properties_changed) ( GObject* object, guint n_pspecs, GParamSpec** pspecs )

为一组属性发出属性更改通知。很少需要重写 dispatch_properties_changed

notify: void (* notify) ( GObject* object, GParamSpec* pspec )

notify 信号的类闭包。

constructed: void (* constructed) ( GObject* object )

在对象创建过程的最后一步中,g_object_new() 调用 constructed 函数。在调用时,所有构造属性已在对象上设置。此调用的目的是允许只能在设置构造属性后才能执行的对象初始化步骤。constructed 实现者应链接到其父类的 constructed 调用,以允许其完成初始化。

虚拟方法

GObject.ObjectClass.constructed

在对象创建过程的最后一步中,g_object_new() 调用 constructed 函数。在调用时,所有构造属性已在对象上设置。此调用的目的是允许只能在设置构造属性后才能执行的对象初始化步骤。constructed 实现者应链接到其父类的 constructed 调用,以允许其完成初始化。

GObject.ObjectClass.dispatch_properties_changed

为一组属性发出属性更改通知。很少需要重写 dispatch_properties_changed

GObject.ObjectClass.dispose

dispose 函数应删除对其他所有对象的引用,但保持实例的其他完整性,以便客户端方法调用仍然有效。它可运行多次(由于引用循环)。返回之前,dispose 应链接到父类的 dispose 方法。

GObject.ObjectClass.finalize

实例完成函数,应完成在 dispose 中开始的实例完成,并链接到父类的 finalize 方法。

GObject.ObjectClass.get_property

此类型所有属性的通用读取器。应为具有属性的每种类型覆盖此读取器。

GObject.ObjectClass.notify

针对 object 上的属性 property_name 发送“通知”信号。

GObject.ObjectClass.set_property

此类型所有属性的通用设置器。应针对具有属性的每种类型覆盖此设置器。如果 set_property 的实现不显式发出属性更改通知,则类型系统会隐式执行此操作。但是,如果显式发出通知信号,则类型系统不会再次发出该信号。

类方法

g_object_class_find_property

查找类的属性的 GParamSpec

g_object_class_install_properties

从一组 GParamSpecs 中安装新属性。

since: 2.26

g_object_class_install_property

安装新属性。

g_object_class_list_properties

获取类的所有属性的 GParamSpec* 数组。

g_object_class_override_property

在父类或 oclass 实现的接口中,将 property_id 注册为引用具有 name 名称的属性。这允许此类“覆盖”父类中的属性实现或提供接口中属性的实现。

自:2.4