2010-06-04 107 views
4

從標題:Class是什麼?

typedef struct objc_class *Class; 
typedef struct objc_object { 
    Class isa; 
} *id; 

我得到的ID是什麼。它是一個只有一個成員的結構:isa,來自類型Class。 Class被重定向到obj_class,或者是什麼?而obj_class似乎是一個殭屍。無法弄清楚它是什麼。那麼Class在現實中是什麼?只是一個普通的舊結構?那裏有什麼?

回答

3

是的,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有漏洞ç..

+0

這是一個類的舊觀點。在現代運行時(包括在iPhone上),Class結構是不透明的,您可以在ObjC運行時使用API​​來獲取(有時編輯)信息。這允許將來對運行時進行更多更改/優化,而不會破壞二進制兼容性。 – bbum 2010-06-04 18:15:58

+0

是的,忘了提及它..剛剛添加!謝謝 – Jack 2010-06-04 18:17:08

+0

'Class'是一個指向結構的指針 – user102008 2012-05-31 03:24:44

相關問題