类
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 类型的对齐(通常是 guint64
或 gdouble
)。如果你需要 GObject
中的元素更大对齐,应在堆上分配它(已对齐),或安排你的 GObject
进行适当填充。此保证适用于 GObject
(或衍生)结构、GObjectClass
(或衍生)结构,以及 G_ADD_PRIVATE()
分配的任何私有数据。
构造函数
g_object_new_with_properties
创建新 GObject
子类型的实例,并使用提供的数组设置其属性。这两个数组都必须恰好包含 n_properties
个元素,而名称和值按索引对应。
自:2.54
函数
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_with_closures
在 source
上的 source_property
与 target
上的 target_property
之间创建绑定,允许您设置该绑定使用的转换函数。
since: 2.26
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_remove_weak_pointer
移除以前使用 g_object_add_weak_pointer() 添加的 object
中的弱引用。weak_pointer_location
必须与 g_object_add_weak_pointer() 一起使用。
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_setv
设置“object”的“n_properties”属性。要设置的属性将从“values”取出。所有属性都必须有效。如果传递了无效的属性,将发出警告,并且可能会出现未定义的行为。
自:2.54
g_object_steal_qdata
此函数取回透过 g_object_set_qdata() 储存的使用者资料,并且不用呼叫其“destroy()”函数(如果有的)从物件中移除“资料”。通常,仅需要呼叫此函数来更新具有摧毁通知的使用者资料指针,例如:.
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() 添加了强引用,也就是说,强制对象存在)。
类结构
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.dispose
dispose
函数应删除对其他所有对象的引用,但保持实例的其他完整性,以便客户端方法调用仍然有效。它可运行多次(由于引用循环)。返回之前,dispose
应链接到父类的 dispose
方法。
GObject.ObjectClass.set_property
此类型所有属性的通用设置器。应针对具有属性的每种类型覆盖此设置器。如果 set_property
的实现不显式发出属性更改通知,则类型系统会隐式执行此操作。但是,如果显式发出通知信号,则类型系统不会再次发出该信号。
类方法
g_object_class_override_property
在父类或 oclass
实现的接口中,将 property_id
注册为引用具有 name
名称的属性。这允许此类“覆盖”父类中的属性实现或提供接口中属性的实现。
自:2.4