SEl和IMP

一,SEl和IMP到底是什么

SEL : 類成員方法的指針,但不同于C語言中的函數(shù)指針关摇,函數(shù)指針直接保存了方法的地址荒叶,但SEL只是方法編號(hào)。IMP:一個(gè)函數(shù)指針,保存了方法的地址

IMP和SEL關(guān)系

每一個(gè)繼承于NSObject的類都能自動(dòng)獲得runtime的支持输虱。在這樣的一個(gè)類中些楣,有一個(gè)isa指針,指向該類定義的數(shù)據(jù)結(jié)構(gòu)體,這個(gè)結(jié)構(gòu)體是由編譯器編譯時(shí)為類(需繼承于NSObject)創(chuàng)建的.在這個(gè)結(jié)構(gòu)體中有包括了指向其父類類定義的指針以及 Dispatch table. Dispatch table是一張SEL和IMP的對(duì)應(yīng)表宪睹。也就是說方法編號(hào)SEL最后還是要通過Dispatch table表尋找到對(duì)應(yīng)的IMP愁茁,IMP就是一個(gè)函數(shù)指針,然后執(zhí)行這個(gè)方法

1)通過方法獲得方法的編號(hào):SEL methodId=@selector(methodName);或者SEL methodId = NSSelectorFromString(methodName);

2)通過方法編號(hào)執(zhí)行該編號(hào)的方法: [self performSelector:methodId withObject:nil];

3)通過方法編號(hào)獲取該編號(hào)的方法名 NSString*methodName = NSStringFromSelector(methodId);

4)通過方法編號(hào)獲得IMP IMP methodPoint = [self methodForSelector:methodId];

5)執(zhí)行IMP void (*func)(id, SEL, id) = (void *)imp; func(self, methodName,param);

注意分析:如果方法沒有傳入?yún)?shù)時(shí):void (*func)(id, SEL) = (void *)imp; func(self, methodName);

如果方法傳入一個(gè)參數(shù)時(shí):void (*func)(id, SEL,id) = (void *)imp; func(self, methodName,param);

如果方法傳入倆個(gè)參數(shù)時(shí):void (*func)(id, SEL,id,id) = (void *)imp; func(self, methodName,param1,param2);

參考以下文獻(xiàn):
文獻(xiàn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末亭病,一起剝皮案震驚了整個(gè)濱河市鹅很,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌罪帖,老刑警劉巖促煮,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邮屁,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡菠齿,警方通過查閱死者的電腦和手機(jī)佑吝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绳匀,“玉大人芋忿,你說我怎么就攤上這事〖部茫” “怎么了戈钢?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長是尔。 經(jīng)常有香客問我殉了,道長,這世上最難降的妖魔是什么拟枚? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任宣渗,我火速辦了婚禮,結(jié)果婚禮上梨州,老公的妹妹穿的比我還像新娘。我一直安慰自己田轧,他們只是感情好暴匠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著傻粘,像睡著了一般每窖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弦悉,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天窒典,我揣著相機(jī)與錄音,去河邊找鬼稽莉。 笑死瀑志,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的污秆。 我是一名探鬼主播劈猪,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼良拼!你這毒婦竟也來了战得?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤庸推,失蹤者是張志新(化名)和其女友劉穎常侦,沒想到半個(gè)月后浇冰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡聋亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年肘习,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杀捻。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡井厌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出致讥,到底是詐尸還是另有隱情仅仆,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布垢袱,位于F島的核電站墓拜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏请契。R本人自食惡果不足惜咳榜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一冒滩、第九天 我趴在偏房一處隱蔽的房頂上張望者娱。 院中可真熱鬧,春花似錦纷责、人聲如沸氯夷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腮考。三九已至雇毫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間踩蔚,已是汗流浹背棚放。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留馅闽,地道東北人飘蚯。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像捞蛋,于是被迫代替她去往敵國和親孝冒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉拟杉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,709評(píng)論 0 9
  • SEL SEL是選擇器(selector)的一個(gè)類型庄涡。選擇器就是指向方法的一個(gè)指針, OC在編譯的時(shí)候搬设,會(huì)根據(jù)方法...
    Ahri阿貍閱讀 1,544評(píng)論 1 1
  • SEL : 類成員方法的指針穴店,但不同于C語言中的函數(shù)指針撕捍,函數(shù)指針直接保存了方法的地址,但SEL只是方法編號(hào)泣洞。 I...
    此頁空白閱讀 321評(píng)論 0 0
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,096評(píng)論 1 32
  • SEL : 類成員方法的指針忧风,但不同于C語言中的函數(shù)指針,函數(shù)指針直接保存了方法的地址球凰,但SEL只是方法編號(hào)狮腿。 I...
    壯了個(gè)壯閱讀 28,018評(píng)論 9 98