objective-c runtime method

重新認識+和-方法

+:(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ù)查找(注意這里面是我們長認為的-號方法)。

代碼驗證:

---------------------------------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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容