交换方法

2018-09-08  本文已影响1人  frankisbaby

利用runtime可以修改系统的方法实现,这种方式无任何侵入性,因此也是很多第三方常用的技术。它的解决具有全局性;

实现步骤:

1.给系统的方法添加分类;

2.自己实现一个带有扩展功能的方法;

3.交换方法 ,只需要交换一次

事例:

需求:有一个项目,已经开发了两年,忽然项目负责人添加一个功能,每次UIImage加载图片,告诉我是否成功;

对于这种需求怎么解决呢?我们想到的可能是通过继承的方式,

解决方案1:对imageNamed进行二次封装,然后以后加载图片就调用这个方法;但是这种方法对于组件化项目却不可能这么干,因为组件化之后你不可能挨个去更改各个组件;

解决方案2:利用runtime进行彻底的方法交换;

代码实现:

代码实现

交换前的图解:

交换前

交换后的图解:

交换后

知识点:

+ (void)load;

+ (void)load {

}

把类加载进内存的时候调用,只会调用一次;

+ (void)initialize ;

+ (void)initialize {  

  static dispatch_once_t onceToken;     dispatch_once(&onceToken, ^{           

//这里写方法交换的代码

  });

}

这个方法会调用多次,使用的话需要加入oncetoken来进行锁定;

上一篇 下一篇

猜你喜欢

热点阅读