美文网首页
Runtime(二)方法交换

Runtime(二)方法交换

作者: 为什么划船不靠桨 | 来源:发表于2017-07-31 19:24 被阅读0次
在上一篇文章的基础上,我们实现对方法的交换,我们把方法交换放在load方法中.首先说下为什么要进行方法交换,其原因为当系统自带的方法功能不够,而我们想给系统自带的方法扩展一些功能.并且保留原有的功能时,需要进行方法交换.当然我们也可以继承自系统的类,重写系统方法进行方法覆盖达到方法交换的目的,当然我们也可以用runtime实现方法交换
实际的使用场景举例:1、在数组中,越界访问程序会崩,可以用自己的方法添加判断防止程序出现崩溃数组或字典中不能添加nil,如果添加程序会崩,用自己的方法替换系统防止系统崩溃;2、当我们的网络链接URL中出现汉字时,链接是无效的,但是这么明显的错误,编译器不会给我们指出来,但是不留心你可能又找不到,为了防止出现这种低级错误,我们也可以进行方法交换.
load是很特殊的一个方法,其会先于这个类执行的方法,该方法在类或者分类第一次加载内存的时候自动调用,一个load方法,很多个类都会执行,也就是说会执行多次,然而+load方法只在加载的时候执行一次.
首先我们在实现文件中添加一个change方法
-(void)change{
    NSLog(@"交换方法的实现");
}
然后在+(void)load中实现对方法的交换
+(void)load{
    Method method1 = class_getInstanceMethod(self.class, @selector(eat));
    Method method2 = class_getInstanceMethod(self.class, @selector(change));
    //进行交换
    method_exchangeImplementations(method1, method2);
}
当完成以上操作的时候,在控制器中调用run方法时其实是调用的change方法,反之亦然.

Runtime方法交换就讲到这里

相关文章

  • objc runtime (四)动态添加属性

    在《objc runtime (二)交换方法》中我提到过runtime最实用的就是交换方法和动态添加属性两个用法。...

  • Runtime(二)方法交换

    在上一篇文章的基础上,我们实现对方法的交换,我们把方法交换放在load方法中.首先说下为什么要进行方法交换,其原因...

  • runtime

    runtime交换方法 动态添加方法

  • runTime常用方法

    使用runTime改变实例成员的值 使用runtime来交换两个方法 注意再次调用该方法不交换 使用runTime...

  • Runtime

    runtime运行时机制1:通过runtime,实现方法交换(交换两个类方法、交换两个实例方法)2:通过runti...

  • Day3

    1 runtime运行时机制1:通过runtime,实现方法交换(交换两个类方法、交换两个实例方法)。2:通过ru...

  • runtime的理解(二)

    主要内容 利用 runtime 交换方法 利用 runtime 动态添加方法 利用 runtime 动态添加属性 ...

  • 查看SDK调用支付宝参数

    使用runtime 方法交换openurl

  • objc runtime (二)交换方法

    上一篇介绍了如何用runtime发送消息,大家应该也都对objc runtime有了一个初步的认识,对需要了解的可...

  • iOS runtime如何交换两个类方法

    如有转载,请标明出处:iOS runtime如何交换两个类方法 runtime交换实例方法,老生常谈的问题,很多b...

网友评论

      本文标题:Runtime(二)方法交换

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