2011-04-24 30 views
19

沒問題,所以我明白一個對象是一個必須分配和初始化的類的實例,但它們本身就是對象?Objective-C中的類對象嗎?

我知道當你創建一個新類時,它就是NSObject之類的其他實例。所以,如果這使它成爲一個類,那麼對象不僅可以容納變量和方法,而且還可以容納其他對象,對嗎?

對不起,這可能是非常基本的,但我正在閱讀關於可可和xcode的兩本書,這一點有點不清楚(可能是因爲我缺乏其他語言的經驗)。

+0

我認爲你在談論元類? http://cocoawithlove.com/2010/01/what-is-meta-class-in-objective-c.html – manojlds 2011-04-24 20:35:39

回答

31

Here是格雷格·帕克

的事情一個很好的解釋引用:

[...]每一個Objective-C類也是 對象。它有一個isa指針和 其他數據,並可以響應 選擇器。當你像[NSObject alloc]一樣調用「類 方法」時,你實際上是向該 類對象發送消息的 。

既然一個類是一個對象,它必須是 某個其他類的實例:一個 元類。元類是 類對象的描述,只是 類似於 類的普通實例。特別是, 元類的方法列表是類 方法:類 對象響應的選擇器。當您發送 消息類 - 一個 元類的實例 - objc_msgSend()看起來 通過 元類的方法列表(和其超,如果 有的話)來決定調用何種方法。 類方法描述的 元類代表類 對象,就像實例方法 所描述的類代表 的實例對象一樣。

元類的情況如何?是否 元類一直向下?編號A 元類是根類 類的元類的一個實例;根元類 本身是元類根 的一個實例。 isa鏈在這裏以 的週期結束:實例類到 元類到根元類的自身。 元類的行爲是一個指針 很少有問題,因爲在真正的 世界沒有人發送消息到 元類對象。 [...]

而且有趣的記載:

Understanding the Objective-C Runtime科林·惠勒
(搜索標題爲段落 「所以,類定義對象...」)

What is a meta-class in Objective-C?由馬特·加拉格爾

相關問題