接口

GameObject类型插件

描述 [源代码]

interface GObject.TypePlugin : GObject.Object

处理动态加载类型生命周期的接口。

GameObject类型系统支持动态加载类型。以下是过程:

  1. 类型最初被引入(通常是在第一次加载模块或通过主应用程序(它知道哪些模块引入哪些类型)时),如下所示: c new_type_id = g_type_register_dynamic (parent_type_id, "TypeName", new_type_plugin, type_flags); 其中 new_type_pluginGTypePlugin 接口的实现。

  2. 类型的实现被引用,例如通过 g_type_class_ref() 或通过 g_type_create_instance()(由 g_object_new() 调用)或通过对从 new_type_id 派生的类型进行的上述操作之一。

  3. 这会导致类型系统通过在 new_type_plugin 上调用 g_type_plugin_use()g_type_plugin_complete_type_info() 来加载类型的实现。

  4. 在某个时候,类型的实现不再需要,例如在 g_type_class_unref()g_type_free_instance()(当实例的引用计数下降到零时)被调用之后。

  5. 这会导致类型系统丢弃从 g_type_plugin_complete_type_info() 获取的信息,然后它在 new_type_plugin 上调用 g_type_plugin_unuse()

  6. 从第二步开始,事情可能会重复。

所以基本上,您需要实现一个带有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

调用插件 GTypePluginClasscomplete_interface_info 函数。应该无需在 GameObject 类型系统本身之外使用此函数。

g_type_plugin_complete_type_info

调用插件 GTypePluginClasscomplete_type_info 函数。应该无需在 GameObject 类型系统本身之外使用此函数。

g_type_plugin_unuse

调用插件 GTypePluginClassunuse_plugin 函数。应该无需在 GameObject 类型系统本身之外使用此函数。

g_type_plugin_use

调用插件 GTypePluginClassuse_plugin 函数。应该无需在 GameObject 类型系统本身之外使用此函数。