什么是ObjCTypes?

先看一下消息轉(zhuǎn)發(fā)流程:

消息轉(zhuǎn)發(fā)流程

在forwardInvocation這一步壁肋,你必須要實(shí)現(xiàn)一個方法:

- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector OBJC_SWIFT_UNAVAILABLE("");

該方法用于說明消息的返回值和參數(shù)類型。NSMethodSignature是方法簽名籽慢,它是用來記錄返回值和參數(shù)類型的一個對象浸遗。看一下與該類相關(guān)的方法:


//在NSMethodSignature.h中
+ (nullable NSMethodSignature *)signatureWithObjCTypes:(const char *)types;   //1

//在NSObject.h中
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector OBJC_SWIFT_UNAVAILABLE("");  //2

+ (NSMethodSignature *)instanceMethodSignatureForSelector:(SEL)aSelector OBJC_SWIFT_UNAVAILABLE("");   //3

2和3兩個方法是根據(jù)SEL來構(gòu)造NSMethodSignature箱亿,而1方法則是今天的主角跛锌,那里面的types究竟是什么呢?
根據(jù)1的方法名稱可以猜想届惋,types是ObjCTypes髓帽,它是一個是字符串?dāng)?shù)組,該數(shù)組包含了方法的類型編碼盼樟。那如果我們用該方法實(shí)例化NSMethodSignature的時候究竟如何寫types呢氢卡?先來舉個例子:

- (void)goToSchoolWithPerson:(Person *)person;

[zhangsan goToSchoolWithPerson:lisi];

其ObjcTypes就是 "v@:@"。那究竟是如何得來該字符串呢晨缴?其實(shí)我們有兩種方式:

  1. 直接查表。在Type Encodings里面列出了對應(yīng)關(guān)系峡捡。
  2. 使用 @encode()計(jì)算击碗。( NSLog(@"%s",@encode(BOOL))的結(jié)果為B )

我們都知道消息發(fā)送會被轉(zhuǎn)換成objc _ msgSend(id reciever,SEL sel,prarams1,params2,....)。所以上面的方法會被轉(zhuǎn)換成:

void objc_msgSend(zhangsan,@selector(goToSchoolWithPerson:),lisi);   //包含兩個隱藏參數(shù)

這里的 “v@:@”就代表:

  • "v":代表返回值void
  • "@":代表一個對象们拙,這里指代的id類型zhangsan,也就是消息的receiver
  • ":":代表SEL
  • "@":代表參數(shù)lisi

再舉個例子:


- (BOOL)ifSuccess:(NSString *)tag

其ObjCTypes為:"B@:@"稍途,其中:

  • "B":代表BOOL。 // NSLog(@"%s",@encode(BOOL))的結(jié)果為B
  • "@":一個id類型的對象砚婆,第一個參數(shù)類型械拍,也就是objc _ msgSend的第一個參數(shù)
  • ":":代表對應(yīng)的SEL突勇,第二個參數(shù)
  • "@":一個id類型的對象,也就是tag坷虑。

到此甲馋,我們就知道了該如何書寫ObjCTypes了。

1.Type Encodings

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末迄损,一起剝皮案震驚了整個濱河市定躏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌芹敌,老刑警劉巖痊远,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異氏捞,居然都是意外死亡碧聪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門液茎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逞姿,“玉大人,你說我怎么就攤上這事豁护『呖” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵楚里,是天一觀的道長断部。 經(jīng)常有香客問我,道長班缎,這世上最難降的妖魔是什么蝴光? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮达址,結(jié)果婚禮上蔑祟,老公的妹妹穿的比我還像新娘。我一直安慰自己沉唠,他們只是感情好疆虚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著满葛,像睡著了一般径簿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嘀韧,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天篇亭,我揣著相機(jī)與錄音,去河邊找鬼锄贷。 笑死译蒂,一個胖子當(dāng)著我的面吹牛曼月,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播柔昼,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼哑芹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了岳锁?” 一聲冷哼從身側(cè)響起绩衷,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎激率,沒想到半個月后咳燕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乒躺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年招盲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘉冒。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡曹货,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出讳推,到底是詐尸還是另有隱情顶籽,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布银觅,位于F島的核電站礼饱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏究驴。R本人自食惡果不足惜镊绪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望洒忧。 院中可真熱鬧蝴韭,春花似錦、人聲如沸熙侍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛉抓。三九已至牢硅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芝雪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工综苔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惩系,地道東北人位岔。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像堡牡,于是被迫代替她去往敵國和親抒抬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉晤柄,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,709評論 0 9
  • 我們常常會聽說 Objective-C 是一門動態(tài)語言擦剑,那么這個「動態(tài)」表現(xiàn)在哪呢?我想最主要的表現(xiàn)就是 Obje...
    Ethan_Struggle閱讀 2,192評論 0 7
  • 參考鏈接: http://www.cnblogs.com/ioshe/p/5489086.html 簡介 Runt...
    樂樂的簡書閱讀 2,135評論 0 9
  • 本文轉(zhuǎn)載自:http://yulingtianxia.com/blog/2014/11/05/objective-...
    ant_flex閱讀 758評論 0 1
  • 當(dāng)秧苗從旱地移栽到水田的時候,也就是去牯嶺的時候了爬坑。也許正是從那時起纠屋,我腦海中對于中國的記憶始終帶著一種濃厚的芳香...
    橙妮妮閱讀 350評論 2 2