我對Objective-C id
類型的理解是它是指向未知類型對象的指針。在我看來,它就像一個void *,用於Objective-C類,其中一些編譯器糖在頂部用於類型檢查等。我的問題是爲什麼它不是id*
而不是id
那麼因爲它是一個指針類型?如果這是Java或C#的對象引用沒有使用*
聲明,那麼我不會感到驚訝。但在Objective-C中,每個類都由C風格指針引用,所以爲什麼要隱藏未知對象類型的*
?爲什麼Objective-C中的id類型省略了星號?
6
A
回答
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
變量是經常 稱爲
相關問題
- 1. 爲什麼Date.strptime省略了時間?
- 2. 省略號在PowerShell中做什麼?
- 3. 爲什麼TypeScript允許我省略函數的返回類型?
- 4. 瞭解和使用類型化球拍省略號正確
- 5. 這是什麼語法「...」(省略號)?
- 6. 爲什麼Python在SOAP消息中省略了屬性?
- 7. 爲什麼在打印區域中省略了css
- 8. 爲什麼在這裏省略泛型類型參數是可以接受的?
- 9. python 3.5爲什麼我的while循環省略了第一行?
- 10. 帶省略元素的CSS省略號?
- 11. 爲什麼pthread_exit會拋出省略號捕獲的東西?
- 12. 爲什麼我的UIlabel顯示省略號點(點點)?
- 13. 省略號
- 14. MySQL - MySQL 5.7中的服務器ID設置了什麼值,如果我們省略了服務器ID。
- 15. GLM in R,瞭解爲什麼省略係數
- 16. 爲什麼省略了一些JSON屬性?
- 17. 爲什麼這個while循環省略了第一次迭代?
- 18. 如何設置省略號了TD
- 19. 爲什麼在返回類型之前的尖括號有時會從通用方法的定義中省略
- 20. text-overflow:省略號不工作 - 爲什麼?
- 21. 初始化映射時爲什麼不能省略大括號?
- 22. 爲什麼我們只在某些時候省略括號?
- 23. 帶省略號的函數原型
- 24. 爲什麼JVM省略註釋
- 25. 爲什麼有些省略else語句?
- 26. 手冊頁中的省略號(...)意味着什麼
- 27. 列表中的(省略號)是什麼意思?
- 28. CoffeeScript中的省略號是什麼意思?
- 29. 省略號的標記類別
- 30. 爲什麼subprocess.call忽略「*」星號的傳球「MV」命令
有一個在'Class'沒有星號或者「isa指針。」。 – kennytm