method_exchangeImplementations交換IMP指針

method_exchangeImplementations作用:method_exchangeImplementations可以交換兩個方法的具體實現(xiàn),先舉個例子,再解釋。

@implementation ViewController

- (void)viewDidLoad

{

? ? ? ?[super viewDidLoad];

? ? ? ?[self methodExchange];

? ? ? ?[self method1];

? ? ? ?[self method2];

}

-(void)method1

{

? ? ? ? ? NSLog(@"method1");

}

-(void)method2

{

? ? ? ? ? NSLog(@"method2");

}

-(void)methodExchange

{

? ? ? ? Method method1 = class_getInstanceMethod([self class], @selector(method1));

? ? ? ? Method method2 = class_getInstanceMethod([self class], @selector(method2));

? ? ? ?//交換method1和么thod的IMP指針,(IMP代表了方法的具體的實現(xiàn)) ?

? ? ? ?method_exchangeImplementations(method1, method2);

}

@end

運行截圖如下:


[self method1]輸出method2,[self method2]輸出method1。

原理如下:

@selector(method1) ------->IMP1(函數(shù)指針,具體實現(xiàn)輸出么method1)

@selector(method2) ------->IMP1(函數(shù)指針,具體實現(xiàn)輸出么method2)

當(dāng)執(zhí)行method_exchangeImplementations(method1, method2)變成如下:

@selector(method1) ------->IMP2(函數(shù)指針,具體實現(xiàn)輸出么method2)

@selector(method2) ------->IMP1(函數(shù)指針,具體實現(xiàn)輸出么method1)

所以,[self method1]輸出method2,[self method2]輸出method1。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,762評論 0 9
  • Objective-C語言是一門動態(tài)語言,他將很多靜態(tài)語言在編譯和鏈接時期做的事情放到了運行時來處理。這種動態(tài)語言...
    tigger丨閱讀 1,431評論 0 8
  • 原文出處:南峰子的技術(shù)博客 Objective-C語言是一門動態(tài)語言,它將很多靜態(tài)語言在編譯和鏈接時期做的事放到了...
    _燴面_閱讀 1,252評論 1 5
  • 昨天在家休息一天,暖同學(xué)最近兩天狀態(tài)還不錯。咳嗽還是有的,一天有個兩三次,還在忌口中。 天天小面湯,哈這貨居然沒喝...
    小豬天堂閱讀 206評論 3 0
  • 【摩篇第八】(8.5)原文:說者聽必合于情,故曰情合者聽。故物歸類,抱薪趨火,燥者先燃;平地注水,濕者先濡。此物類...
    執(zhí)子之念閱讀 613評論 0 1