美文网首页iOS讨论组@IT·互联网iOS Developer
runtime常见用法二(交换方法)

runtime常见用法二(交换方法)

作者: BigBowen | 来源:发表于2017-04-27 11:48 被阅读22次

简单实现

接下来介绍一个iOS开发的黑魔法,方法交换,顾名思义,就是你可以在项目运行时替换一个方法的实现,例如,你想把类A的a方法替换为b方法.
大概思路:
1.给类A提供一个分类
2.给分类提供一个我们想要实现的方法b
3.然后将该b方法和a方法交换.
代码:

+ (void)load {
Method aMethod = class_getClassMethod(<#__unsafe_unretained Class cls#>, <#SEL name#>);
Method bMethod = class_getClassMethod(<#__unsafe_unretained Class cls#>, <#SEL name#>);
method_exchangeImplementations(aMethod, bMethod);
}

注意点

1.给系统的类提供分类时最好不要重写系统的方法,假设是class A的a方法,你在分类里面重写该系统方法,然后调用super防止a方法的其它功能被干掉,但是,你有没有发现,我们是在分类里调用super,你能保证A的super有这个方法吗?就算有,也不能保证没有被A重写过,所以,这种方法最好少用.
2.交换方法的实现要写在load方法里面,因为交换方法只需要实现一次,如果执行了第二次,那这两个方法就会被交换回来了.

相关文章

  • runtime常见用法二(交换方法)

    简单实现 接下来介绍一个iOS开发的黑魔法,方法交换,顾名思义,就是你可以在项目运行时替换一个方法的实现,例如,你...

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

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

  • 一、使用runtime实现查看 imageNamed:是否加载成

    最近学习runtime初读文档不是很了解,于是找到几个案例先熟悉一下用法 使用runtime实现方法交换,首先需要...

  • ios - runtime运行时应用---交换方法

    runtime运行时用法之一 --- 交换类的方法,此处简单写了把系统的UIView的setBackgroundC...

  • ios - runtime运行时应用---交换方法

    runtime运行时用法之一 --- 交换类的方法,此处简单写了把系统的UIView的setBackgroundC...

  • Runtime(二)方法交换

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

  • 02 runtime用法之交换方法

    1 方法调用机制 本质是让对象发送消息.对象方法保存到类中,每个类都有一个方法列表 (1)根据对象的isa指针找到...

  • runtime

    runtime交换方法 动态添加方法

  • runTime常用方法

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

  • Runtime

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

网友评论

    本文标题:runtime常见用法二(交换方法)

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