美文网首页
2. 动态交换两个方法的实现

2. 动态交换两个方法的实现

作者: Alanxx | 来源:发表于2017-02-24 15:12 被阅读0次

    Teacher: What's your name?

    XiaoMing: My name is XiaoMing.

    Teacher: Pardon?

    XiaoMing: My name is __

    在程序当中,假设XiaoMing的第一次回答为firstSay,后来被Runtime交换了一个名字叫secondSay的方法,最终再调用firstSay的时候,其实是调用了secondSay的实现。那么,Runtime是如何做到的呢?

    2)Step:

    ①动态找到firstSay和secondSay方法

    Method m1 = class_getInstanceMethod([self.xiaoMing class], @selector(firstSay));

    Method m2 = class_getInstanceMethod([self.xiaoMing class], @selector(secondSay));

    ②交换两个方法

    method_exchangeImplementations(m1, m2);

    3)Show Code:

    -(void)answer{

    Method m1 = class_getInstanceMethod([self.xiaoMing class], @selector(firstSay));

    Method m2 = class_getInstanceMethod([self.xiaoMing class], @selector(secondSay));

    method_exchangeImplementations(m1, m2);

    NSString *secondName = [self.xiaoMing firstSay];

    self.nameTf.text = secondName;

    NSLog(@"XiaoMing:My name is %@",secondName);

    }

    相关文章

      网友评论

          本文标题:2. 动态交换两个方法的实现

          本文链接:https://www.haomeiwen.com/subject/njdwwttx.html