Runtime(二)方法交换

在上一篇文章的基础上,我们实现对方法的交换,我们把方法交换放在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方法交换就讲到这里

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 引述 在通常开发过程中,我们经常会用到系统类,而它提供的方法又不能完全满足我们开发的需要,那么在此时,我们需要为系...
    全栈攻城狮DWQ阅读 3,771评论 3 2
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,768评论 0 9
  • 目录 Objective-C Runtime到底是什么 Objective-C的元素认知 Runtime详解 应用...
    Ryan___阅读 1,960评论 1 3
  • 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的...
    西木阅读 30,620评论 33 466
  • 1 他站在路口等车,去高铁站接儿子,儿子的高铁五点半到,肺积水,生病回家。他是用烟来表达烦躁的。烟蒂不断的...
    我是陈慕阅读 400评论 2 4