美文网首页
交换方法

交换方法

作者: frankisbaby | 来源:发表于2018-09-08 15:01 被阅读1次

利用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来进行锁定;

相关文章

  • iOS 方法交换

    交换类方法 交换实例方法

  • iOS -- runtime的应用

    runtime主要有一下几种应用场景 方法交换 添加属性 (一)方法交换 (1)字体适配 方法交换实际交换的是方法...

  • iOS 方法交换 method_exchangeImplemen

    方法交换 使用方法交换需要注意些什么呢 1、在交换系统方法后要注意结束前调用本方法,也就是执行系统方法 2、再交换...

  • OC runtime 底层API解析

    关于class的API 交换方法API 替换方法的实现 交换方法的实现

  • 交换方法

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

  • 方法交换

    +(void)load load当类加载进内存的时候调用,而且不管有没有子类,都只会调用一次。在main函数之前调...

  • 交换方法

  • 交换方法

    几个函数 一、选择合适的时机,交换方法 二、替换方法内部使用注意

  • 交换方法

    // //ViewController.m //CocoTest_1 // //Created by S u p ...

  • 方法交换

    交换tableview reloadData 方法实现空数据提示

网友评论

      本文标题:交换方法

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