美文网首页
交换方法

交换方法

作者: 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来进行锁定;

    相关文章

      网友评论

          本文标题:交换方法

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