Objective-C 類的實(shí)質(zhì)是結(jié)構(gòu)體

id類型是什么:

objc/objc.h

可見id是一個(gè)指向objc_object結(jié)構(gòu)體的指針景馁。

看一條語(yǔ)句就清晰了:

id obj = [[NSObject alloc] init];

所以對(duì)象obj就是一個(gè)objc_object結(jié)構(gòu)體肛根。它們都有個(gè)成員變量isa,其類型為objc_class无畔。它又是一個(gè)指針宅粥,指向objc_class結(jié)構(gòu)體参袱,那么下面再看objc_class里面有什么。

objc_class是什么:

objc/runtime.h

逐條閱讀秽梅,英文不太糟糕的應(yīng)該都沒有障礙:

  • struct objc_class *isa; (最不好理解的)
    指向另一個(gè)類的指針抹蚀,這個(gè)“另一個(gè)類”是“元類”(metaclass)。?元類用來(lái)表述類對(duì)象本身所具備的元數(shù)據(jù)企垦】雒“類方法”就定義于此,因?yàn)檫@些方法可以理解成類對(duì)象的實(shí)例方法竹观。每個(gè)類僅有一個(gè)“類對(duì)象”镐捧,而每個(gè)“類對(duì)象”僅有一個(gè)與之相關(guān)的“元類”。(引自《Effective Objective-C 2.0》57頁(yè))(注意臭增,“類對(duì)象”在這句話里是一個(gè)整體懂酱,而不是解釋成類的對(duì)象)
  • struct objc_class *super_class;
    指向另一個(gè)類的指針,這個(gè)“另一個(gè)類”是超類誊抛,確立繼承關(guān)系列牺。
  • const char *name;
    ?實(shí)例名
  • long version;
    版本
  • long info;
    其他信息
  • long instance_size;
    實(shí)例大小
  • struct objc_ivar_list *ivars;
    實(shí)例變量列表,提供實(shí)例變量信息拗窃,比如類的實(shí)例有多少個(gè)實(shí)例變量瞎领。
  • struct objc_method_list **methodLists;
    實(shí)例方法列表泌辫,提供實(shí)例方法信息,比如類的實(shí)例實(shí)現(xiàn)了多少個(gè)方法九默。
  • *struct objc_cache cache;
    緩存區(qū)
  • struct objc_protocol_list *protocols;
    實(shí)例實(shí)現(xiàn)的協(xié)議

</br>
具體的例子總是更容易理解的震放,?現(xiàn)在從抽象到具體。
我自定義了一個(gè)類(btw驼修,?許多人寫博都喜歡把自定義的類叫SomeClass殿遂、MyClass、CustomClass等等乙各,這些類名依然會(huì)讓人感覺到很抽象)墨礁,所以我自定義類會(huì)叫Kardel。

Kardel *myKar = [[Kardel alloc] init];

為了更直觀耳峦,我把myK定義成id類型:

id myKar = [[Kardel alloc] init];

如上所言恩静,id是一個(gè)指向objc_object結(jié)構(gòu)體的指針,myK這個(gè)實(shí)例自然就是一個(gè)objc_object結(jié)構(gòu)體了蹲坷。然后蜕企,??根據(jù)我們上面所見,objc_object結(jié)構(gòu)體——即實(shí)例里面只有一個(gè)成員變量冠句,isa指針轻掩。它會(huì)告訴我們這個(gè)實(shí)例所屬的類。

結(jié)論1:類的實(shí)例是objc_object結(jié)構(gòu)體

</br>

結(jié)論2:類是objc_class結(jié)構(gòu)體

</br>

結(jié)論3:objc_class結(jié)構(gòu)體中還有objc_class懦底,即類里面的類——“元類”

</br>
三者之間的繼承關(guān)系:

Numbers繪圖(改自《Effective Objective-C 2.0 圖2-6》)

還有值得思考的問題是為什么要這么做:實(shí)例里面沒有存放很多信息(只有一個(gè)指針唇牧,靠其得知它是什么類),而類負(fù)責(zé)存放實(shí)例的信息聚唐,元類負(fù)責(zé)存放的是類的信息丐重。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市杆查,隨后出現(xiàn)的幾起案子扮惦,更是在濱河造成了極大的恐慌,老刑警劉巖亲桦,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崖蜜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡客峭,警方通過(guò)查閱死者的電腦和手機(jī)豫领,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)舔琅,“玉大人等恐,你說(shuō)我怎么就攤上這事。” “怎么了课蔬?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵囱稽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我二跋,道長(zhǎng)战惊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任同欠,我火速辦了婚禮,結(jié)果婚禮上横缔,老公的妹妹穿的比我還像新娘铺遂。我一直安慰自己,他們只是感情好茎刚,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布襟锐。 她就那樣靜靜地躺著,像睡著了一般膛锭。 火紅的嫁衣襯著肌膚如雪粮坞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天初狰,我揣著相機(jī)與錄音莫杈,去河邊找鬼。 笑死奢入,一個(gè)胖子當(dāng)著我的面吹牛筝闹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播腥光,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼关顷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了武福?” 一聲冷哼從身側(cè)響起议双,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捉片,沒想到半個(gè)月后平痰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伍纫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年觉增,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翻斟。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逾礁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嘹履,我是刑警寧澤腻扇,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站砾嫉,受9級(jí)特大地震影響幼苛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜焕刮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一舶沿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧配并,春花似錦括荡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至观腊,卻和暖如春邑闲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背梧油。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工苫耸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人儡陨。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓鲸阔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親迄委。 傳聞我的和親對(duì)象是個(gè)殘疾皇子褐筛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容