objc_msgSend

OC中消息的概念

OC中在對(duì)象上調(diào)用方法仔雷,用OC的術(shù)語叫“傳遞消息”气破。在OC中,如果向某對(duì)象傳遞消息,會(huì)使用動(dòng)態(tài)綁定機(jī)制來決定需要調(diào)用的方法借帘。在底層飞涂,都是普通的C語言函數(shù)衷旅,對(duì)象收到消息后铺根,到底該調(diào)用哪個(gè)方法,完全由運(yùn)行期決定罐旗,甚至可以在運(yùn)行時(shí)改變膳汪,這種特性使得OC成為真正的動(dòng)態(tài)語言。
發(fā)送消息可以用下面的代碼來表示:

id returnValue = [someObject messageName:parameter];

這條語句表示向someObject發(fā)送了一個(gè)消息九秀。someObject我們成為“消息接收者”(recevier)遗嗽,message我們稱為“選擇子”(selector)。選擇子和參數(shù)合起來我們稱之為消息(message)

objc_msgSend的作用

編譯器會(huì)將上述語句轉(zhuǎn)換為一個(gè)標(biāo)準(zhǔn)的C語言函數(shù)調(diào)用鼓蜒,如下:

id objc_msgSend(id self, SEL cmd, ...);

這是一個(gè)參數(shù)可變的函數(shù)媳谁,第一個(gè)參數(shù)代表接收者,第二個(gè)參數(shù)代表選擇子友酱,后面的參數(shù)就是消息中的參數(shù),順序不變柔纵。
objc_msgSend函數(shù)會(huì)依據(jù)接收者與選擇子的類型來調(diào)用適當(dāng)?shù)姆椒ǖ奚肌T摲椒ㄐ柙诮邮照咚鶎俚念愔兴褜ぁ胺椒斜怼保绻苷业脚c選擇子名稱相符的方法搁料,就跳轉(zhuǎn)至實(shí)現(xiàn)代碼或详。如果找不到,則沿著繼承體系向上找郭计。如果還是找不到霸琴,則執(zhí)行性“消息轉(zhuǎn)發(fā)”。
還有一些屬于其他“邊界情況”的消息調(diào)用過程昭伸,由另一些函數(shù)來處理

  • objc_msgSend_fpret: 返回浮點(diǎn)數(shù)
  • objc_msgSend_stret: 返回值為結(jié)構(gòu)體
  • objc_msgSendSuper:向父類發(fā)消息梧乘,例如:[super message:parameter],那么就交由此函數(shù)來處理。也有另外兩個(gè)與objc_msgSend_stret和objc_msgSend_fpret等效的函數(shù),用于處理發(fā)給super的相應(yīng)消息选调。

深入閱讀

Objective-C 消息發(fā)送與轉(zhuǎn)發(fā)機(jī)制原理
OCRuntime

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末夹供,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子仁堪,更是在濱河造成了極大的恐慌哮洽,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弦聂,死亡現(xiàn)場離奇詭異鸟辅,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)莺葫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門匪凉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人徙融,你說我怎么就攤上這事洒缀。” “怎么了欺冀?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵树绩,是天一觀的道長。 經(jīng)常有香客問我隐轩,道長饺饭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任职车,我火速辦了婚禮瘫俊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘悴灵。我一直安慰自己扛芽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布积瞒。 她就那樣靜靜地躺著川尖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪茫孔。 梳的紋絲不亂的頭發(fā)上叮喳,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音缰贝,去河邊找鬼馍悟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛剩晴,可吹牛的內(nèi)容都是我干的锣咒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼宠哄!你這毒婦竟也來了壹将?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤毛嫉,失蹤者是張志新(化名)和其女友劉穎诽俯,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體承粤,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡暴区,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辛臊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仙粱。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖彻舰,靈堂內(nèi)的尸體忽然破棺而出伐割,到底是詐尸還是另有隱情,我是刑警寧澤刃唤,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布隔心,位于F島的核電站,受9級(jí)特大地震影響尚胞,放射性物質(zhì)發(fā)生泄漏硬霍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一笼裳、第九天 我趴在偏房一處隱蔽的房頂上張望唯卖。 院中可真熱鬧,春花似錦躬柬、人聲如沸拜轨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撩轰。三九已至,卻和暖如春昧廷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背偎箫。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來泰國打工木柬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人淹办。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓眉枕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子速挑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

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