Некоторые реализации объекта могут нуждаться в сохранении плавающего состояния объекта в определённых частях кода (например GtkMenu), для этого может использоваться следующее:
Пример 3.
/* сохраняем плавающее состояние */
gboolean was_floating = g_object_is_floating (object);
g_object_ref_sink (object);
/* скрытая часть кода */
...;
/* восстановление плавающего состояния */
if (was_floating)
g_object_force_floating (object);
g_obejct_unref (object); /* освобождение предварительно полученной ссылки */
основной установщик для всех свойств этого типа. Должен быть переназначен для каждого типа со свойствами. Реализация set_property не должна явно издавать уведомление об изменении свойства, это обрабатывается системой типов.
get_property ()
основной получатель для всех свойств этого типа. Должен быть переназначен для каждого типа со свойствами.
dispose ()
функция dispose сбрасывает все ссылки на другие объекты, но сохраняет экземпляр нетронутым, так чтобы вызванный метод клиента остался роботающим. Это может быть выполнено множество раз (due to reference loops). Перед возвратом, dispose должна привязаться к dispose методу родительского класса.
finalize ()
функция инициализации экземпляра, должна завершать финализацию экземпляра начатую в dispose и привязаться к методу finalize родительского класса.
dispatch_properties_changed ()
издаёт уведомление изменения свойства для связки свойств. Переназначение dispatch_properties_changed должно быть редко необходимо.
Регистрирует property_id как ссылку свойства с именем name в родительском классе или в интерфейсе реализуемом с помощью oclass. Это позволяет классу переназначатьсвойство реализации в родительском классе или обеспечить реализацию свойства из интерфейса.
Помните
oclass :
property_id :
новый ID свойства
name :
имя свойства зарегистрированное в родительском классе или в интерфейсе этого класса.
GObject является базовым типом обеспечивающим основные атрибуты и методы для всех объектных типов в GTK+, Pango и других библиотеках основанных на GObject. Класс GObject обеспечивает методы для конструирования и уничтожения объектов, методы доступа к свойству и поддержку сигналов. Сигналы подробно описаны в (3).
наследует . Единственное различие между ними заключается в том что начальная ссылка помечается как плавающая ссылка. Это значит что ни какой частью кода ни кто не "владеет". Основная мотивация обеспечения плавающих ссылок - удобство C. В частности, это позволяет писать код как:
Если container_add_child() выполнит для помещённого child, ссылка на вновь созданный child не будет плавающей. Без плавающей ссылки, container_add_child() может создать ссылку на новый child только с помощью , поэтому реализовать этот код без плавающей ссылки нужно было бы так:
Плавающие ссылки могут быть преобразованы в обычные ссылки вызовом . Для объектов которые уже не имеют плавающих ссылок, эквивалентна и возвращает новую ссылку. Так как плавающие ссылки в основном полезны только для удобства C, языковые привязки которые обеспечивают автоматизированные ссылки и монопольно обслуживают память (вроде умных указателей или "сборщики мусора") поэтому не нуждаются во вставке плавающих ссылок в их API.
Все поля в структуре GObject являются закрытыми для реализации и не должны использоваться непосредственно.
g_type_class;
функция constructor вызывается с помощью для завершения инициализации объекта после установки всех свойств конструирования. Первое что должна сделать функция constructor - реализовать цепочку к constructor родительского класса. Отмена constructor редко необходима, например для обработки свойств конструирования, или для реализации единицы подмножества (singletons).
функция constructed вызывается с помощью как завершающий шаг процесса создания объекта. В точке вызова, все свойства конструкции уже установлены на объект. Цель этого вызова позволить учесть шаги инициализации объекта которые выполняются только после установки свойств конструкции. Реализованные constructed должны привязываться к вызову constructed их родительского класса что позволяет завершить их инициализацию.
Вспомогательная структура GObjectConstructParam используется для расположения / пар в constructor принадлежащем .
*pspec;
параметр конструктора
*value;
Тип функции get_property в .
a
числовой id под которым было зарегистрировано свойство с помощью .
возвращаемого значения свойства
описание свойства
Тип функции set_property в .
числовой id под которым было зарегистрировано свойство с помощью .
описание свойства
Тип функции finalize в .
финализируемый
Возвращает логическое значение или указывающее соответствует ли помещённый типовой id или происходит из него.
Типовой id для проверки отношения к .
или , указывая соответствует ли type объекту .
Приводит или полученный указатель к указателю (GObject*). В зависимости от текущего уровня отладки, эта функция может вызвать определённые динамические проверки чтобы идентифицировать недопустимые приведения типов.
Проверяет допустимость указателя типа .
Экземпляр для проверки соответствия типу .
Приводит полученную структуру к структуре .
допустимая
Проверяет является ли class "is a" допустимой структурой типа или производной.
Возвращает классовую структуру связанную с экземпляром .
экземпляр .
допустимая
допустимая
для нового свойства
Находит для свойства класса.
для свойства, или если класс не имеет свойства с таким именем
Возвращает массив * для всех свойств класса.
массив * который должен быть освобождён после использования
Внутренне, переназначение реализуется созданием свойства типа ; обычно операции которые запрашивают свойства объектного класса, такие как или вернут переназначенное свойство. Однако, в одном случае, construct_propertiesпараметр виртуальной функции constructor, помещается вместо , так чтобы поле param_id было заполнено правильным . Для виртуального использования это не имеет разницы. Если вам нужно получить переназначенное свойство, вы можете вызвать .
Добавляет свойство к интерфейсу; это полезно только для интерфейсов которые добавлены в GObject-производные типы. Добавление свойства в интерфейс заставляет все объекты класса иметь совместимые свойства с этим интерфейсом. Совместимые свойства могут быть вновь созданным , но обычно используется так чтобы объектный класс обеспечил реализацию и унаследовал описание свойства, значение по умолчанию, связь, и так далее из своего интерфейса.
Эта функция предназначается для вызова из значения по умолчанию vtable интерфейсной функции инициализации (член class_init в .) Это нельзя вызвать после того как class_init вызвана для любой реализации объектных типов этого интерфейса.
для нового свойства
Находит с полученным именем для интерфейса. В основном, интерфейсный vtable помещённый как g_iface будет значением по умолчанию vtable из , или, если известно что интерфейс уже загружен, .
для свойства интерфейса с именем property_name, или если нет такого свойства.
Списки свойств интерфейса. В основном, интерфейсный vtable помещаемый как g_iface будет значением по умолчанию vtable из , или, если известно что интерфейс уже загружен, .
указатель на массив указателей структур . Структурами владеет GLib, но массив должен быть освобождён с помощью когда он вам больше не нужен.