接口
GameObject类型插件
描述 [源代码]
interface GObject.TypePlugin : GObject.Object
处理动态加载类型生命周期的接口。
GameObject类型系统支持动态加载类型。以下是过程:
-
类型最初被引入(通常是在第一次加载模块或通过主应用程序(它知道哪些模块引入哪些类型)时),如下所示:
c new_type_id = g_type_register_dynamic (parent_type_id, "TypeName", new_type_plugin, type_flags);
其中new_type_plugin
是GTypePlugin
接口的实现。 -
类型的实现被引用,例如通过
g_type_class_ref()
或通过g_type_create_instance()
(由g_object_new()
调用)或通过对从new_type_id
派生的类型进行的上述操作之一。 -
这会导致类型系统通过在
new_type_plugin
上调用g_type_plugin_use()
和g_type_plugin_complete_type_info()
来加载类型的实现。 -
在某个时候,类型的实现不再需要,例如在
g_type_class_unref()
或g_type_free_instance()
(当实例的引用计数下降到零时)被调用之后。 -
这会导致类型系统丢弃从
g_type_plugin_complete_type_info()
获取的信息,然后它在new_type_plugin
上调用g_type_plugin_unuse()
。 -
从第二步开始,事情可能会重复。
所以基本上,您需要实现一个带有use_count的GTypePlugin
类型,一旦use_count从零增加到一,您需要加载实现以成功处理随后的 g_type_plugin_complete_type_info()
调用。以后,也许在成功的use/unuse调用之后,一旦use_count下降到零,您可以将实现再次卸载。类型系统确保在需要类型时再次调用 g_type_plugin_use()
和 g_type_plugin_complete_type_info()
。
GTypeModule
是一个实现 GTypePlugin
的类,它已经实现除了实际模块加载和卸载之外的大部分功能。它甚至可以处理每个模块注册的多个类型。
先决条件
为了实现类型插件,您的类型必须继承自 GameObject
。
实例方法
g_type_plugin_complete_interface_info
调用插件 GTypePluginClass
的 complete_interface_info
函数。应该无需在 GameObject 类型系统本身之外使用此函数。
g_type_plugin_complete_type_info
调用插件 GTypePluginClass
的 complete_type_info
函数。应该无需在 GameObject 类型系统本身之外使用此函数。