2012-06-06 32 views
0

id 在Objective-C中,對象標識符具有不同的數據類型:id。這種類型是任何類型對象的普通類型,不管類是什麼類型的,都可以用於類的實例和類對象本身。關於Apple的obj-c編程指南中的「id」的混淆

id anObject; 

直到這裏其簡單明瞭


對於Objective-C中的面向對象的結構如方法返回值,ID替換INT作爲缺省數據類型。 (對於嚴格的C構造,如函數返回值,int仍然是默認類型。)

不明白它在說什麼id替換int?並在最後一個括號內int仍然是默認值?


關鍵字零被定義爲空對象,具有0的id,零,而另一個基本類型的Objective-C中的一個id值都在頭文件objc/objc.h定義。

ID被定義爲指向對象數據結構:

typedef struct objc_object { 
    Class isa; 
} *id; 

上面的是不是一個OBJ-C語法它是什麼以及它是什麼解釋?


因此,每個對象都有一個isa變量,告訴它它是一個實例的類。因爲類類型本身定義爲指針:

typedef struct objc_class *Class; 

在ISA變量經常被稱爲

也沒聽懂這最後對「isa指針」。

+0

明確你的意思是「上述不是obj-c語法是什麼,它是什麼解釋?」 –

回答

2

對於Objective-C中的面向對象的結構,如方法返回值,id將int替換爲默認數據類型。 (對於嚴格的C構造,例如函數返回值,int仍然是默認類型。)

您的書在這裏有點混亂。所有的意思是,如果你正在使用對象,而你不想獲得更具體的內容,那麼id是一個很好的數據類型。

ID被定義爲指向對象數據結構:

typedef struct objc_object { 
    Class isa; 
} *id; 

上面的是不是一個OBJ-C語法它是什麼以及它是什麼解釋?

這是對象的內部表示。你的書正在試圖證明一個客觀的C對象不是魔術:在表面下它只是一個結構。數據類型id是一個指向這樣的結構的指針。

因此,每個對象都有一個isa變量,告訴它它是一個實例的類。由於類的類型本身定義爲指針:「isa指針」

typedef struct objc_class *Class;

在ISA變量經常被稱爲

在它的內部數據結構,每一個對象具有一指向另一個代表其類的對象的指針。

如果您只是對Objective-C編程感興趣,至少在學習時不需要知道這些東西。如果你正在做一些高級的東西,比如當你直接與Objective-C運行時交互時,它會派上用場。

+1

muah中指定的可愛答案:) –

1

不明白它在說什麼id替換int?

Objective-C中是C.

在C的超集,函數必須有一個返回值。如果未指定返回值,則默認情況下函數返回int

Objective-C覆蓋C的默認行爲,並且返回id作爲未指定其返回值的任何類方法的默認值。但在同一時間離開其他(C-)的默認行爲的功能相同(即int仍然是一切的默認返回值)

+0

hiii毛茸茸的,謝謝你的答覆。我在問這個typedef結構體objc_object {isa; } * id; ...這個片段在做什麼?其在obj-c指南 –