- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
第一期:
在GObject中我混淆了从父类派生的子类的实例对象是否继承了父类的属性?
第二期:
在 GObject 中,g_object_class_install_properties 函数在类初始化函数中将属性添加到自身类中,但实际上这些属性对于类的每个实例对象都有一个副本。换句话说,类的每个实例对象都有这些属性的副本。
此外,我阅读了 GObject 代码片段。Gobject.c文件中的如下代码:
class->set_property = g_object_do_set_property;
class->get_property = g_object_do_get_property;
首先上面的函数是什么时候调用的?
其次 如果子类派生自父类子类覆盖了这些方法(set_property 和 get_property),那么如果 g_object_new 创建新的子类实例并设置属性值,则仅调用 set_property 回调函数,调用子类set_property后是否调用父类的set_property方法?
不知道一次只调用子类的set_property后,是不是一次调用父类的set_property方法?
如果你知道这些问题,请花时间回答我的问题,非常感谢。
最佳答案
如果您还没有看到 GNOME Developer 网站,它有几页与您提出的问题相关的有用信息。下面指向的链接包含非常简单的示例代码,后面是对代码中发生的事情的非常详细的描述。我在下面引用(和链接)的示例页面专门解决了您的问题,但周围页面中提供了更多关于该主题的内容。
第一期:
Derivable types can be subclassed further, and their class and instance structures form part of the public API which must not be changed if API stability is cared about. They are declared using G_DECLARE_DERIVABLE_TYPE:
请看这里的例子: G_DECLARE_DERIVABLE_TYPE()
第二期:
generic get/set mechanism for object properties. When an object is instantiated, the object's class_init handler should be used to register the object's properties with g_object_class_install_properties.
请在此处查看示例: Object properties
我相信你的具体问题:
什么时候调用上面的函数?
在上面的 Object Properties 链接中解决了这些和周围段落的非常详细的问题:
If the user's GValue had been set to a valid value, g_object_set_property would have proceeded with calling the object's set_property class method. Here, since our implementation of Foo did override this method, execution would jump to foo_set_property after having retrieved from the GParamSpec the param_id [4] which had been stored by g_object_class_install_property.
Once the property has been set by the object's set_property class method, execution returns to g_object_set_property which makes sure that the "notify" signal is emitted on the object's instance with the changed property as parameter unless notifications were frozen by g_object_freeze_notify.
关于c - 在 glib 的 GObject 中,我混淆了从父类派生的子类的实例对象是否继承了父类的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34545375/
我有一个 GObject“A”,它在其构造函数中创建另一个 GObject“B”的实例。 “B”对象需要传递几个仅用于构造的属性。现在,在创建对象“A”的实例时,我希望允许通过对象“A”的构造函数将这
我正在尝试用 c (c_glib) 创建一个 Flume-thrift 客户端,但在创建应发送到服务器的 gobject 时遇到问题。我在 main.c 中的行中收到以下错误: `GLib-GObje
我在 gobject 上阅读了一个维基百科页面,上面写着, Depending only on GLib and libc, GObject is a cornerstone of GNOME and
我尝试像这样导入 Gtk:从 gi.repository 导入 Gtk 我收到以下错误: ImportError:当使用 gi.repository 时,您不能导入像“gobject”这样的静态模块。
我是编程新手。我正在创建一个 Qt GUI 应用程序。这是一个小的拼字游戏。问题是每当我在构建它后从命令提示符启动这个程序时,我都会在命令提示符下得到以下输出: JumbleGame 1.0 Laun
GObject 世界中有没有办法在编译时检测未初始化的纯虚函数? 我想调用一个纯虚拟方法而不先检查它。 /* pure_virtual_method must be non NULL */ base-
我正在使用 pygtk 通过框架编写程序。主程序做以下事情: 创建一个看门狗线程来监控一些资源 创建客户端从socket接收数据 调用gobject.Mainloop() 但是好像我的程序进入Main
问题 使用 GObject 和 C,我试图在模块“Foo”中创建名为“Bar”的类 GObject 的子类。但是,宏“G_DECLARE_FINAL_TYPE”(在 gobject/gtype.h 中
如何在 GObject/Gtk 中获取某个类的类对象?例如,如果我的类是 GtkSpinButton,我想获取代表该类的 GtkSpinButtonClass 实例。就是中的参数“class” gtk
我正在寻找 GObject 备忘单,了解常见的 OOP 概念如何映射到 GObject 的设施。例如考虑: AnyGObject *o; o = anygobject_new(); 现在,约定是什么.
何时取消引用 GObject 以及何时释放它? GObject tutorial声明一个 GObject 应该被和释放,但是一个 GObject 真的不应该释放自己当且仅当它的引用计数下降到 0 吗?
我想使用 GObject.add_emission_hook 来连接以捕获类的所有实例的信号。它似乎有效,但只有一次。在下面的最小示例中,无论单击其中一个按钮多少次,“收到信号”仅打印一次。这是为什么
有没有办法用小部件存储自定义信息? 例如,假设我有一个包含 20 个网址的列表。 我创建了 20 个按钮,每个 url 一个。 我想做到这一点,以便当我单击按钮时,会打开一个网址。但我需要一种方法来知
以 glib GObject 为例: typedef struct _MyInstance MyInstance; struct _MyInstance { GObject paren
我在 python 中使用 io_add_watch 监视器时遇到问题(通过 gobject)。我想在每次通知后对整个缓冲区进行非阻塞读取。这是代码(缩短了一点): class SomeApp(obj
GObject Reference Manual声明 GObject 系统旨在通过使用一些通用胶水代码将用 C 编写的函数导出到其他语言。还需要注意的是,这种胶水明确存在于 perl 和 python
我想在 Codeblocks 中使用 C GObject 库创建类。所以我有 2 个类:A.h 和 A.c但是当我像这样包含 gobject 库时: #include 它给我一个错误: Only
我想使用 GObject 调用的那个函数看起来像下面这样: char * some_object_fun(SomeObject *self, char *input); 有什么好的方法可以实现吗?我会
我正在开发一个 gstreamer 应用程序。有一些基本概念我不明白。谁能解释一下 g Object 的概念?还有什么是gobject initialization, gobject properti
我想在开始耗时的操作(将几兆字节的文本加载到 TextBuffer 中)之前修改 PyGTK 应用程序中某些标签的文本。但是,当我尝试执行此操作时,标签更新直到 TextBuffer 开始加载文件(文
我是一名优秀的程序员,十分优秀!