method_exchangeImplementations交换IMP指针

method_exchangeImplementations作用:method_exchangeImplementations可以交换两个方法的具体实现,先举个例子,再解释。

@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代表了方法的具体的实现)  

       method_exchangeImplementations(method1, method2);

}

@end

运行截图如下:


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

原理如下:

@selector(method1) ------->IMP1(函数指针,具体实现输出么method1)

@selector(method2) ------->IMP1(函数指针,具体实现输出么method2)

当执行method_exchangeImplementations(method1, method2)变成如下:

@selector(method1) ------->IMP2(函数指针,具体实现输出么method2)

@selector(method2) ------->IMP1(函数指针,具体实现输出么method1)

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,879评论 0 9
  • Objective-C语言是一门动态语言,他将很多静态语言在编译和链接时期做的事情放到了运行时来处理。这种动态语言...
    tigger丨阅读 5,351评论 0 8
  • 原文出处:南峰子的技术博客 Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了...
    _烩面_阅读 5,083评论 1 5
  • 昨天在家休息一天,暖同学最近两天状态还不错。咳嗽还是有的,一天有个两三次,还在忌口中。 天天小面汤,哈这货居然没喝...
    小猪天堂阅读 1,598评论 3 0
  • 【摩篇第八】(8.5)原文:说者听必合于情,故曰情合者听。故物归类,抱薪趋火,燥者先燃;平地注水,湿者先濡。此物类...
    执子之念阅读 3,759评论 0 1

友情链接更多精彩内容