首先在.h文件中定義
GType aaa_bbb_get_type(void); 通常aaa表示命名空間,bbb表示對象名字
在對應的.c文件中使用宏G_DEFINE_TYPE
G_DEFINE_TYPE(AaaBbb,aaa_bbb,G_TYPE_OBJECT)
G_DEFINE_TYPE宏會聲明一些函數,並且實現了aaa_bbb_get_type(void),所以才需要在對應的.h中聲明aaa_bbb_get_type的函數。
G_DEFINE_TYPE中會調用一個g_type_register_static_simple的函數,這個函數的作用就是將用戶自己定義的類型註冊到系統中,除此之外G_DEFINE_TYPE還定義了2個函數(aaa_bbb_init、aaa_bbb_class_init)沒有實現,需要定義對象的用戶自己去實現。這個是對象的初始化函數,相當於java中的構造函數,第一個函數在每個對象創建的時候都會被調用,第二個函數只有在第一次創建對象的時候被調用。確切的說,在調用g_type_class_ref的時候,如果class沒有初始化,就會調用aaa_bbb_class_init。