objective-c runtime method

重新認(rèn)識+和-方法

+:(Class)類方法梦皮。
-:(Instance)實例方法。

實質(zhì)上對于runtime而言桃焕,并沒有什么加減號之別剑肯。

消息轉(zhuǎn)發(fā)圖.png

對于runtime而言,+號方法和-號方法观堂,都是一樣的方法让网。
只是+號方法在meta class中查找,而-號方法在class中查找型将。

注意到Root class(meta)的superclass指向了Root class(class)寂祥。
在我們的Root Class正是NSObject。

上圖說明一個問題七兜,如果我們給NSObject發(fā)送+號方法丸凭,它將在meta class中先查找方法,如果查找不到腕铸,會轉(zhuǎn)到Root class(class)中繼續(xù)查找(注意這里面是我們長認(rèn)為的-號方法)惜犀。

代碼驗證:

---------------------------------NSObject(Foo).h
#import <Foundation/Foundation.h>

@interface NSObject (Foo)

//+ (void)foo;
- (void)foo;

@end
---------------------------------NSObject(Foo).m
#import "NSObject+Foo.h"

@implementation NSObject (Foo)

- (void)foo {
    NSLog(@"Foo from NSObject(Foo)");
}

//+ (void)foo {
//    NSLog(@"Foo from NSObject Class Method");
//}

@end
---------------------------------main.m
#import <Foundation/Foundation.h>
#import "Person.h"
#import "NSObject+Foo.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        [Person foo];
    }
    return 0;
}

輸出結(jié)果:
Foo from NSObject(Foo)
Person為繼承于NSObject的簡單類,無任何方法實現(xiàn)狠裹。

我們并未給NSObject添加+號Class方法foo虽界,但是我們卻可以給NSObject發(fā)送該消息,還正確的輸出我們的-號方法實現(xiàn)涛菠。

如果我們?nèi)サ鬇implementation NSObject(Foo)中加號+ (void)foo實現(xiàn)的注釋莉御,雖然我們并沒有申明+(void)foo,但是它依然會給NSObject的meta class添加foo方法俗冻。此時[Person foo]消息將可以直接在meta class找到foo實現(xiàn)礁叔,會輸出:

Foo from NSObject Class Method。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末迄薄,一起剝皮案震驚了整個濱河市琅关,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌讥蔽,老刑警劉巖涣易,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件画机,死亡現(xiàn)場離奇詭異,居然都是意外死亡新症,警方通過查閱死者的電腦和手機(jī)步氏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來账劲,“玉大人戳护,你說我怎么就攤上這事∑俳梗” “怎么了腌且?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長榛瓮。 經(jīng)常有香客問我铺董,道長,這世上最難降的妖魔是什么禀晓? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任精续,我火速辦了婚禮,結(jié)果婚禮上粹懒,老公的妹妹穿的比我還像新娘重付。我一直安慰自己,他們只是感情好凫乖,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布确垫。 她就那樣靜靜地躺著,像睡著了一般帽芽。 火紅的嫁衣襯著肌膚如雪删掀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天导街,我揣著相機(jī)與錄音披泪,去河邊找鬼。 笑死搬瑰,一個胖子當(dāng)著我的面吹牛款票,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播泽论,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼艾少,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了佩厚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤说订,失蹤者是張志新(化名)和其女友劉穎抄瓦,沒想到半個月后潮瓶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡钙姊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年毯辅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片煞额。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡思恐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出膊毁,到底是詐尸還是另有隱情胀莹,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布婚温,位于F島的核電站描焰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏栅螟。R本人自食惡果不足惜荆秦,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望力图。 院中可真熱鬧步绸,春花似錦、人聲如沸吃媒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晓折。三九已至惑朦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間漓概,已是汗流浹背漾月。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留胃珍,地道東北人梁肿。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像觅彰,于是被迫代替她去往敵國和親吩蔑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354

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

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉填抬,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,715評論 0 9
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理烛芬,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • Method Swizzling 原理 SEL是把函數(shù)的名稱赘娄,參數(shù)類型仆潮,返回值類型拼在一起進(jìn)行hash化后得到的在...
    CerasusLand閱讀 265評論 0 0
  • 前言 我第一次開始重視Objective-C Runtime是從2014年11月1日,@唐巧老師在微博上發(fā)的一條微...
    一縷殤流化隱半邊冰霜閱讀 47,040評論 178 616
  • “晴天遣臼,陰天和下雨天性置,你喜歡哪一個” 如若在妙子那個眨巴著眼睛,見雨緬愁的年齡揍堰,我可能會不假思索脫口而出“才不要雨...
    小二劉閱讀 152評論 0 0