iOSRuntime之method_exchangeImplementations (方法交換)

method_exchangeImplementations注解

    method_exchangeImplementations(<#Method  _Nonnull m1#>, <#Method  _Nonnull m2#>)
    //method_exchangeImplementations來把一個方法與另外一個方法進行交換。

先看代碼如下:

演示用的Person類

#import <Foundation/Foundation.h>

@interface Person : NSObject
@property(nonatomic, assign) NSInteger age;
@property(nonatomic, copy) NSString * name;

+(Person *)sharedManager;

- (instancetype)init;

+ (void) printDZ;

- (void) printDZL;

@end

import "Person.h"
@interface Person ()

@property(nonatomic, strong) NSString * sex;

@end
@implementation Person

+(Person *)sharedManager {
    static Person *sharedManager;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedManager = [[Person alloc] init];
    });
    return sharedManager;
}

- (instancetype)init {
    self = [super init];
    if (self) {
        self.sex = @"---女--";
        self.age = 10;
        self.name = @"布蘭妮";
    }
    return self;
}

+ (void)printDZ
{
//    NSLog(@"this is a class method for %@",NSStringFromClass([self class]));
    NSLog(@"this is a class method from %@",NSStringFromSelector(_cmd));

}

- (void)printDZL {
    NSLog(@"this is a instance method from %@",NSStringFromSelector(_cmd));
//    NSLog(@"this is a instance method for %@",NSStringFromClass([self class]));
}
@end

測試代碼:

#import "ViewController.h"
#import "Person.h"
#import <objc/runtime.h>
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    Person *p1 = [Person new];
    Method m1 = class_getClassMethod([Person class],@selector(printDZ));
    Method m2 = class_getInstanceMethod([p1 class], @selector(printDZL));
    NSLog(@"測試前");
    [Person printDZ];
    [p1 printDZL];
    method_exchangeImplementations(m1, m2);
    NSLog(@"測試后:");
    [Person printDZ];
    [p1 printDZL];
}
@end

打印結(jié)果:

打印截圖.png

方法的初步運用很簡單焚刺,就不加多做解釋了市殷,只要敲一遍卖鲤,立馬就懂了

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辑莫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子脂新,更是在濱河造成了極大的恐慌,老刑警劉巖伞插,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異盾碗,居然都是意外死亡媚污,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門廷雅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耗美,“玉大人,你說我怎么就攤上這事航缀∩碳埽” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵芥玉,是天一觀的道長蛇摸。 經(jīng)常有香客問我,道長灿巧,這世上最難降的妖魔是什么赶袄? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮抠藕,結(jié)果婚禮上饿肺,老公的妹妹穿的比我還像新娘。我一直安慰自己盾似,他們只是感情好敬辣,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著颜说,像睡著了一般购岗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上门粪,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天喊积,我揣著相機與錄音,去河邊找鬼玄妈。 笑死乾吻,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的拟蜻。 我是一名探鬼主播绎签,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼酝锅!你這毒婦竟也來了诡必?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爸舒,沒想到半個月后蟋字,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡扭勉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年鹊奖,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涂炎。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡忠聚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出唱捣,到底是詐尸還是另有隱情两蟀,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布爷光,位于F島的核電站垫竞,受9級特大地震影響澎粟,放射性物質(zhì)發(fā)生泄漏蛀序。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一活烙、第九天 我趴在偏房一處隱蔽的房頂上張望徐裸。 院中可真熱鬧,春花似錦啸盏、人聲如沸重贺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽气笙。三九已至,卻和暖如春怯晕,著一層夾襖步出監(jiān)牢的瞬間潜圃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工舟茶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谭期,地道東北人。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓吧凉,卻偏偏與公主長得像隧出,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子阀捅,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355