GObject 学习笔记汇总
开始学习 Clutter,需要回顾 GObject 的知识。以前写了一系列的 GObject 笔记,现在汇总一下以便查阅。
- 要相信 GObject 是有用而且简单的
- 使用 GObject 库模拟类的数据封装形式
- GObject 子类对象的私有属性模拟
- GObject 子类私有属性的外部访问
- 温故而知新
- GObject 的子类继承
- 继承与接口
- GObject 对接口的模拟
- 函数指针、回调函数与 GObject 闭包
- GObject 的信号机制——概览
- GObject 子类对象的析构过程
- GObject 信号机制——信号的注册
- GObject 信号机制——信号的 Accumulator
- GObject 信号机制——信号的连接
- GObject 信号机制——信号的发射(未完成)
- GObject Introspection 的简单示例
GObject 信号机制——信号连接
GObject Introspection 的简单示例
这段时间以来,一直在跟 GObject 死磕。除了有点枯燥与乏味之外,也没什么不适,就是一堆繁琐但还算是直观的 C 代码罢了。现在,我想让 GObject 单调的学习过程略微轻松一下。毕竟春天正在到来,窗外的迎春花已经怒放了。记得前段时间为自己开始学习 GObject 写了一篇序言“要相信 GObject 是有用并且简单的”,其中引用了 Thinker 的一篇文章“GObject Introspection 带来一些希望”。本文通过一个很小的实例,演示一下 GObject 程序如何通过 GObject Introspection 与 JavaScript 脚本进行结合。
GObject 信号机制——信号 Accumulator
在文档 [1] 中,从外围对 GObject 信号注册的过程进行了初步分析。生命不息,折腾不止,我们应当以 Adrian Hands 大叔为榜样。所以,本文继续解决文档 [1] 中遗留的问题,即 g_signal_new 函数的第 5 个与第 6 个参数的含义。
GObject 信号机制——信号注册
上一篇文档“GObject 的信号机制”只是挖了一个坑便结束了,本篇尝试填坑,不过也不敢有所保证。因为我也不确定会不会因为被 GObject 的信号内幕再次搞晕。
我们先老老实实的阅读 GObject 参考手册的“Concepts / Signal”部分,尽量多获得一些面上的认识。手册中最关键的一句话是:每一个信号在注册的时候都要与某种数据类型(包括 GObject 库中的内建类型或 GObject 子类类型)存在关联,这种数据类型的使用者需要实现信号与闭包的连接,这样在信号被发射时,闭包会被调用。这句话,意味着我们要使用 GObject 信号机制,那么就必须要完成两个步骤:第一个步骤是信号注册,主要解决信号与数据类型的关联问题;第二个步骤是信号连接,主要处理信号与闭包的连接问题。本文主要考察信号注册的大致过程。
GObject 子类对象的析构过程
在“GObject 的信号机制”文中,谈到 GObject 子类对象的析构过程分为两个阶段,第一阶段是 dispose,第二阶段是 finalize。之所以划分成两个阶段而不是一步到位的内存释放,一切皆因尴尬现实之所迫。
GObject 的信号机制——概览
手册所述,GObject 信号(Gignal)主要用于特定事件与响应者之间的连接,它与操作系统级中的信号没有什么关系。例如,当我向一个文件中写入数据的时候,我期望能够有一个或多个函数响应这个“向文件写入数据”的事件,这一期望便可基于 GObject 信号予以实现。
函数指针、回调函数与 GObject 闭包
本文首先复习一下基于 C 语言函数指针和回调函数的概念,进而学习 GObject 闭包的用法。这些知识都与面向对象程序设计基本上没有什么关系。
GObject 对接口的模拟
在文档 [1] 中谈到接口古已有之,但是类的继承赋予了它一些新的概念。本文结合实例,学习如何使用 GObject 库所提供的接口类型来表达这些概念。