Runtime

Runtime是什么

Runtime 又叫運行時氏堤,是一套底層的 C 語言 API评肆,其為 iOS 內(nèi)部的核心之一,我們平時編寫的 OC 代碼毁嗦,底層都是基于它來實現(xiàn)的。比如:

[receiver message];
// 底層運行時會被編譯器轉(zhuǎn)化為:
objc_msgSend(receiver, selector)
// 如果其還有參數(shù)比如:
[receiver message:(id)arg...];
// 底層運行時會被編譯器轉(zhuǎn)化為:objc_msgSend(receiver, selector, arg1, arg2, ...)

為什么需要Runtime

  • Objective-C 是一門動態(tài)語言回铛,它會將一些工作放在代碼運行時才處理而并非編譯時狗准。也就是說,有很多類和成員變量在我們編譯的時是不知道的茵肃,而在運行時腔长,我們所編寫的代碼會轉(zhuǎn)換成完整的確定的代碼運行。
  • 因此验残,編譯器是不夠的捞附,我們還需要一個運行時系統(tǒng)(Runtime system)來處理編譯后的代碼。
  • Runtime 基本是用 C 和匯編寫的您没,由此可見蘋果為了動態(tài)系統(tǒng)的高效而做出的努力鸟召。蘋果和 GNU 各自維護(hù)一個開源的 Runtime 版本,這兩個版本之間都在努力保持一致氨鹏。

Runtime 的作用:OC 在三種層面上與 Runtime 系統(tǒng)進(jìn)行交互

  1. 通過 Objective-C 源代碼
    只需要編寫 OC 代碼欧募,Runtime 系統(tǒng)自動在幕后搞定一切,調(diào)用方法仆抵,編譯器會將 OC 代碼轉(zhuǎn)換成運行時代碼跟继,在運行時確定數(shù)據(jù)結(jié)構(gòu)和函數(shù)。

  2. 通過 Foundation 框架的 NSObject 類定義的方法
    Cocoa 程序中絕大部分類都是 NSObject 類的子類镣丑,所以都繼承了 NSObject 的行為还栓。(NSProxy 類時個例外,它是個抽象超類)
    一些情況下传轰,NSObject 類僅僅定義了完成某件事情的模板剩盒,并沒有提供所需要的代碼。例如 - description方法,該方法返回類內(nèi)容的字符串表示辽聊,該方法主要用來調(diào)試程序纪挎。NSObject類并不知道子類的內(nèi)容,所以它只是返回類的名字和對象的地址跟匆,NSObject的子類可以重新實現(xiàn)异袄。
    還有一些NSObject的方法可以從Runtime系統(tǒng)中獲取信息,允許對象進(jìn)行自我檢查玛臂。例如:
    -class方法返回對象的類烤蜕;
    -isKindOfClass: 和 -isMemberOfClass: 方法檢查對象是否存在于指定的類的繼承體系中(是否是其子類或者父類或者當(dāng)前類的成員變量);
    -respondsToSelector: 檢查對象能否響應(yīng)指定的消息迹冤;
    -conformsToProtocol:檢查對象是否實現(xiàn)了指定協(xié)議類的方法讽营;
    -methodForSelector: 返回指定方法實現(xiàn)的地址。

  3. 通過對 Runtime 庫函數(shù)的直接調(diào)用
    Runtime 系統(tǒng)是具有公共接口的動態(tài)共享庫泡徙。頭文件存放于/usr/include/objc目錄下橱鹏,這意味著我們使用時只需要引入objc/Runtime.h頭文件即可。
    許多函數(shù)可以讓你使用純 C 代碼來實現(xiàn) Objc 中同樣的功能堪藐。除非是寫一些 Objc 與其他語言的橋接或是底層的 debug 工作莉兰,你在寫 Objc 代碼時一般不會用到這些 C 語言函數(shù)。

runtime實現(xiàn)的機制是什么,怎么用礁竞,一般用于干嘛. 你還能記得你所使用的相關(guān)的頭文件或者某些方法的名稱嗎糖荒?

  • 需要導(dǎo)入<objc/message.h><objc/runtime.h>
  • runtime,運行時機制模捂,它是一套C語言庫
  • 實際上我們編寫的所有OC代碼寂嘉,最終都是轉(zhuǎn)成了runtime庫的東西,比如類轉(zhuǎn)成了runtime庫里面的結(jié)構(gòu)體等數(shù)據(jù)類型枫绅,方法轉(zhuǎn)成了runtime庫里面的C語言函數(shù)泉孩,平時調(diào)方法都是轉(zhuǎn)成了objc_msgSend函數(shù)(所以說OC有個消息發(fā)送機制)
  • 因此,可以說runtime是OC的底層實現(xiàn)并淋,是OC的幕后執(zhí)行者
  • 有了runtime庫寓搬,能做什么事情呢?runtime庫里面包含了跟類县耽、成員變量句喷、方法相關(guān)的API,比如獲取類里面的所有成員變量兔毙,為類動態(tài)添加成員變量唾琼,動態(tài)改變類的方法實現(xiàn),為類動態(tài)添加新的方法等
  • 因此澎剥,有了runtime锡溯,想怎么改就怎么改

---->>>>Runtime詳解(面試必備)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子祭饭,更是在濱河造成了極大的恐慌芜茵,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倡蝙,死亡現(xiàn)場離奇詭異九串,居然都是意外死亡,警方通過查閱死者的電腦和手機寺鸥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門猪钮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胆建,你說我怎么就攤上這事烤低。” “怎么了眼坏?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵拂玻,是天一觀的道長酸些。 經(jīng)常有香客問我宰译,道長,這世上最難降的妖魔是什么魄懂? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任沿侈,我火速辦了婚禮,結(jié)果婚禮上市栗,老公的妹妹穿的比我還像新娘缀拭。我一直安慰自己,他們只是感情好填帽,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布蛛淋。 她就那樣靜靜地躺著,像睡著了一般篡腌。 火紅的嫁衣襯著肌膚如雪褐荷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天嘹悼,我揣著相機與錄音叛甫,去河邊找鬼。 笑死杨伙,一個胖子當(dāng)著我的面吹牛其监,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播限匣,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼抖苦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起睛约,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鼎俘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后辩涝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贸伐,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年怔揩,在試婚紗的時候發(fā)現(xiàn)自己被綠了捉邢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡商膊,死狀恐怖伏伐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晕拆,我是刑警寧澤藐翎,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站实幕,受9級特大地震影響吝镣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜昆庇,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一末贾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧整吆,春花似錦拱撵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至府蛇,卻和暖如春集索,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背欲诺。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工抄谐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扰法。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓蛹含,卻偏偏與公主長得像,于是被迫代替她去往敵國和親塞颁。 傳聞我的和親對象是個殘疾皇子浦箱,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

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

  • 參考鏈接: http://www.cnblogs.com/ioshe/p/5489086.html 簡介 Runt...
    樂樂的簡書閱讀 2,135評論 0 9
  • 這篇文章完全是基于南峰子老師博客的轉(zhuǎn)載 這篇文章完全是基于南峰子老師博客的轉(zhuǎn)載 這篇文章完全是基于南峰子老師博客的...
    西木閱讀 30,558評論 33 466
  • Runtime是什么 Runtime 又叫運行時吸耿,是一套底層的 C 語言 API,其為 iOS 內(nèi)部的核心之一酷窥,我...
    SuAdrenine閱讀 878評論 0 3
  • 對于從事 iOS 開發(fā)人員來說咽安,所有的人都會答出【runtime 是運行時】什么情況下用runtime?大部分人能...
    夢夜繁星閱讀 3,721評論 7 64
  • 古人云:魚亦我所欲也妆棒,熊掌亦我所欲也,二者不可得兼沸伏「馍海可是當(dāng)魚和熊掌二者都不可得時,還會不會竭盡全力去做一件事毅糟?有些...
    小曉白菜閱讀 570評論 0 1