從標題:Class是什麼?
typedef struct objc_class *Class;
typedef struct objc_object {
Class isa;
} *id;
我得到的ID是什麼。它是一個只有一個成員的結構:isa,來自類型Class。 Class被重定向到obj_class,或者是什麼?而obj_class似乎是一個殭屍。無法弄清楚它是什麼。那麼Class在現實中是什麼?只是一個普通的舊結構?那裏有什麼?
從標題:Class是什麼?
typedef struct objc_class *Class;
typedef struct objc_object {
Class isa;
} *id;
我得到的ID是什麼。它是一個只有一個成員的結構:isa,來自類型Class。 Class被重定向到obj_class,或者是什麼?而obj_class似乎是一個殭屍。無法弄清楚它是什麼。那麼Class在現實中是什麼?只是一個普通的舊結構?那裏有什麼?
是的,Class
是一個struct
,其中包含該特定類所需的所有信息。這就是你如何在環境中實現一個面向對象的範例,比如C,它默認情況下是不允許的。
我會建議你給看看,以Object-Oriented Programming with ANSI C(PDF),它解釋瞭如何實現一個很好複雜的方式目標爲導向,C.
通常認爲Class
一個結構會包含這樣的事情:
Class super_class
const char *name
long version
long info
long instance_size
struct objc_ivar_list *ivars
struct objc_method_list **methodLists
struct objc_cache *cache
struct objc_protocol_list *protocols
我引用ObjectiveC本身(這是在/usr/include/objc/runtime.h
)。這是一個類定義的方式UNTIL ObjC 2.0。這只是給你的想法..
這個結構是需要允許RTTI,動態invokation和繼承,否則你將不需要知道你在運行時使用哪個對象(有一個指向它的Class
定義)。
記住ObjC是C的超集,所以每一個功能,它通過在其上構建複雜的OOP有漏洞ç..
這是一個類的舊觀點。在現代運行時(包括在iPhone上),Class結構是不透明的,您可以在ObjC運行時使用API來獲取(有時編輯)信息。這允許將來對運行時進行更多更改/優化,而不會破壞二進制兼容性。 – bbum 2010-06-04 18:15:58
是的,忘了提及它..剛剛添加!謝謝 – Jack 2010-06-04 18:17:08
'Class'是一個指向結構的指針 – user102008 2012-05-31 03:24:44