runtime運(yùn)行時(shí) isa指針 SEL方法選擇器 IMP函數(shù)指針 Method方法 runtime消息機(jī)制 runtime的使用

概述

runtime:Objective-C是動(dòng)態(tài)語言蹋宦,它將很多靜態(tài)語言在編譯和鏈接時(shí)做的事放到了運(yùn)行時(shí)衔肢,這個(gè)運(yùn)行時(shí)系統(tǒng)就是runtime若专。

runtime其實(shí)就是一個(gè)庫久信,它基本上是用C和匯編寫的一套API窖杀,這個(gè)庫使C語言有了面向?qū)ο蟮哪芰Α?/p>

靜態(tài)語言:在編譯的時(shí)候會(huì)決定調(diào)用哪個(gè)函數(shù)。

動(dòng)態(tài)語言(OC):在運(yùn)行的時(shí)候根據(jù)函數(shù)的名稱找到對(duì)應(yīng)的函數(shù)來調(diào)用裙士。

isa:OC中入客,類和類的實(shí)例在本質(zhì)上沒有區(qū)別,都是對(duì)象腿椎,任何對(duì)象都有isa指針痊项,它指向類或元類(元類后面會(huì)講解)。

SEL:SEL(選擇器)是方法的selector的指針酥诽。方法的selector表示運(yùn)行時(shí)方法的名字鞍泉。OC在編譯時(shí),會(huì)依據(jù)每一個(gè)方法的名字肮帐、參數(shù)咖驮,生成一個(gè)唯一的整型標(biāo)識(shí)(Int類型的地址),這個(gè)標(biāo)識(shí)就是SEL训枢。

IMP:IMP是一個(gè)函數(shù)指針托修,指向方法最終實(shí)現(xiàn)的首地址。SEL就是為了查找方法的最終實(shí)現(xiàn)IMP恒界。

Method:用于表示類定義中的方法睦刃,它的結(jié)構(gòu)體中包含一個(gè)SEL和IMP,相當(dāng)于在SEL和IMP之間作了一個(gè)映射十酣。

消息機(jī)制:任何方法的調(diào)用本質(zhì)就是發(fā)送一個(gè)消息涩拙。編譯器會(huì)將消息表達(dá)式[receiver message]轉(zhuǎn)化為一個(gè)消息函數(shù)objc_msgSend(receiver, selector)。

Runtime的使用:獲取屬性列表耸采,獲取成員變量列表兴泥,獲得方法列表,獲取協(xié)議列表虾宇,方法交換(黑魔法)搓彻,動(dòng)態(tài)的添加方法,調(diào)用私有方法,為分類添加屬性旭贬。

什么是runtime運(yùn)行時(shí)

概述中已經(jīng)說了怔接,runtime其實(shí)就是一個(gè)庫,這個(gè)庫主要做了兩件事情:

1. 封裝:runtime把對(duì)象用C語言的結(jié)構(gòu)體來表示稀轨,方法用C語言的函數(shù)來表示扼脐。這些結(jié)構(gòu)體和函數(shù)被runtime封裝后,我們就可以在程序運(yùn)行的時(shí)候靶端,對(duì)類/對(duì)象/方法進(jìn)行操作谎势。

2. 尋找方法的最終執(zhí)行:當(dāng)執(zhí)行[receiver message]的時(shí)候凛膏,相當(dāng)于向receiver發(fā)送一條消息message杨名。runtime會(huì)根據(jù)reveiver能否處理這條message,從而做出不同的反應(yīng)猖毫。

在OC中台谍,類是用Class來表示的,而Class實(shí)際上是一個(gè)指向objc_class結(jié)構(gòu)體的指針吁断。

主要依據(jù):

iOS黑魔法-Method Swizzling? ? ?

##runtime的一些使用

-獲取類的屬性列表

-獲取類的方法列表

-獲取類的協(xié)議列表

-獲取類的成員變量列表

-改變私有變量的值

-為一個(gè)類增加新方法

-為類的category 增加新的屬性

-交換方法

-自動(dòng)歸檔/解檔

runtime的正確使用

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末趁蕊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子仔役,更是在濱河造成了極大的恐慌掷伙,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件又兵,死亡現(xiàn)場(chǎng)離奇詭異任柜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)沛厨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門宙地,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人逆皮,你說我怎么就攤上這事宅粥。” “怎么了电谣?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵秽梅,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我剿牺,道長(zhǎng)风纠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任牢贸,我火速辦了婚禮竹观,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己臭增,他們只是感情好懂酱,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著誊抛,像睡著了一般列牺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拗窃,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天瞎领,我揣著相機(jī)與錄音,去河邊找鬼随夸。 笑死九默,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宾毒。 我是一名探鬼主播驼修,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼诈铛!你這毒婦竟也來了乙各?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤幢竹,失蹤者是張志新(化名)和其女友劉穎耳峦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體焕毫,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蹲坷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咬荷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冠句。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖幸乒,靈堂內(nèi)的尸體忽然破棺而出懦底,到底是詐尸還是另有隱情,我是刑警寧澤罕扎,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布聚唐,位于F島的核電站,受9級(jí)特大地震影響腔召,放射性物質(zhì)發(fā)生泄漏杆查。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一臀蛛、第九天 我趴在偏房一處隱蔽的房頂上張望亲桦。 院中可真熱鬧崖蜜,春花似錦、人聲如沸客峭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舔琅。三九已至等恐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間备蚓,已是汗流浹背课蔬。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留郊尝,地道東北人二跋。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像虚循,于是被迫代替她去往敵國(guó)和親同欠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子样傍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

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