Objective-C的對象模型與運(yùn)行時(shí)

對象的代碼塊

typedef struct objc_class *Class;
typedef struct objc_object {
    Class isa;
} *id;

Objective-C的對象就是一個(gè)包含isa指針的數(shù)據(jù)結(jié)構(gòu),而isa又是一個(gè)Class類型的誉己,Class則是一個(gè)名為objc_class的數(shù)據(jù)結(jié)構(gòu)定義睦霎。

runtime.h中對objc_class的定義:


struct objc_class {
  Class isa  OBJC_ISA_AVAILABILITY;
  #if !__OBJC2__
  // 父類
  Class super_class                                  OBJC2_UNAVAILABLE;
  // 類名
  const char *name                                   OBJC2_UNAVAILABLE;
  // 類版本信息
  long version                                       OBJC2_UNAVAILABLE;
  // 類信息
  long info                                          OBJC2_UNAVAILABLE;
  // 類實(shí)例變量大小
  long instance_size                                 OBJC2_UNAVAILABLE;
  // 類成員變量列表
  struct objc_ivar_list *ivars                       OBJC2_UNAVAILABLE;
  // 類方法列表
  struct objc_method_list **methodLists              OBJC2_UNAVAILABLE;
  // 類方法緩存
  struct objc_cache *cache                           OBJC2_UNAVAILABLE;
  // 類協(xié)議列表
  struct objc_protocol_list *protocols               OBJC2_UNAVAILABLE;
  #endif     
} OBJC2_UNAVAILABLE;

作者:iEzreal
鏈接:http://www.reibang.com/p/7edece26de7f

isa:在Objective-C中塌计,類自身也是一個(gè)對象弄捕,這個(gè)對象的isa指針指向metaClass(元類)

super_class:指向該類的父類韵丑,如果該類已經(jīng)是最頂層的根類(如NSObject或NSProxy)爵卒,則super_class為NULL。

cache:用于緩存最近使用的方法撵彻。一個(gè)接收者對象接收到一個(gè)消息時(shí)钓株,它會根據(jù)isa指針去查找能夠響應(yīng)這個(gè)消息的對象。在實(shí)際使用中陌僵,這個(gè)對象只有一部分方法是常用的轴合,很多方法其實(shí)很少用或者根本用不上。這種情況下碗短,如果每次消息來時(shí)受葛,我們都是methodLists中遍歷一遍,性能勢必很差偎谁。這時(shí)总滩,cache就派上用場了。在我們每次調(diào)用過一個(gè)方法后巡雨,這個(gè)方法就會被緩存到cache列表中闰渔,下次調(diào)用的時(shí)候runtime就會優(yōu)先去cache中查找,如果cache沒有鸯隅,才去methodLists中查找方法澜建。這樣,對于那些經(jīng)常用到的方法的調(diào)用蝌以,但提高了調(diào)用的效率炕舵。

version:我們可以使用這個(gè)字段來提供類的版本信息。這對于對象的序列化非常有用跟畅,它可是讓我們識別出不同類定義版本中實(shí)例變量布局的改變咽筋。

元類(Meta Class)
元類存儲著一個(gè)類的所有類方法,當(dāng)我們向一個(gè)對象發(fā)送消息時(shí)徊件,runtime會在這個(gè)對象所屬的這個(gè)類的方法列表中查找方法奸攻;而向一個(gè)類發(fā)送消息時(shí),會在這個(gè)類的meta-class的方法列表中查找虱痕。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末睹耐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子部翘,更是在濱河造成了極大的恐慌硝训,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異窖梁,居然都是意外死亡赘风,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門纵刘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來邀窃,“玉大人,你說我怎么就攤上這事假哎∷膊叮” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵位谋,是天一觀的道長山析。 經(jīng)常有香客問我,道長掏父,這世上最難降的妖魔是什么笋轨? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮赊淑,結(jié)果婚禮上爵政,老公的妹妹穿的比我還像新娘。我一直安慰自己陶缺,他們只是感情好钾挟,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著饱岸,像睡著了一般掺出。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上苫费,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天汤锨,我揣著相機(jī)與錄音,去河邊找鬼百框。 笑死闲礼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的铐维。 我是一名探鬼主播柬泽,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嫁蛇!你這毒婦竟也來了锨并?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤睬棚,失蹤者是張志新(化名)和其女友劉穎琳疏,沒想到半個(gè)月后有决,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡空盼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了新荤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揽趾。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖苛骨,靈堂內(nèi)的尸體忽然破棺而出篱瞎,到底是詐尸還是另有隱情,我是刑警寧澤痒芝,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布俐筋,位于F島的核電站,受9級特大地震影響严衬,放射性物質(zhì)發(fā)生泄漏澄者。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一请琳、第九天 我趴在偏房一處隱蔽的房頂上張望粱挡。 院中可真熱鬧,春花似錦俄精、人聲如沸询筏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嫌套。三九已至,卻和暖如春圾旨,著一層夾襖步出監(jiān)牢的瞬間踱讨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工碳胳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留勇蝙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓挨约,卻偏偏與公主長得像味混,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子诫惭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

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