2012-09-28 37 views
6

我對Objective-C id類型的理解是它是指向未知類型對象的指針。在我看來,它就像一個void *,用於Objective-C類,其中一些編譯器糖在頂部用於類型檢查等。我的問題是爲什麼它不是id*而不是id那麼因爲它是一個指針類型?如果這是Java或C#的對象引用沒有使用*聲明,那麼我不會感到驚訝。但在Objective-C中,每個類都由C風格指針引用,所以爲什麼要隱藏未知對象類型的*爲什麼Objective-C中的id類型省略了星號?

+0

有一個在'Class'沒有星號或者「isa指針。」。 – kennytm

回答

11

id typedef已經是指針:

typedef struct objc_object { 
    Class isa; 
} *id; 

Objective-C Programming Language

在Objective-C,對象標識符是一個不同的數據類型的:id。 這種類型是任何類型的對象的一般類型,不管 類,可以用於類的實例和類對象 本身。

id anObject; 

對於Objective-C的,例如 的面向對象的結構作爲方法返回值,ID替換INT作爲缺省數據類型。 (對於嚴格C構造,諸如函數的返回值,整數 保持默認類型。)

關鍵字零被定義爲空對象,具有0 ID,零的值的ID,以及Objective-C的其他基本類型在 頭文件objc/objc.h中定義。

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

typedef struct objc_object { 
    Class isa; 
} *id; 

每個對象因此具有ISA變量,告訴它的是什麼類的實例。由於類型是本身 定義爲指針:

typedef struct objc_class *Class; 

isa變量是經常 稱爲

相關問題