上一篇文章,我们比较偏理论的介绍了一下iOS运行时机制runtime,这一篇我们就来讲解一下runtime在实际开发中的应运场景。
利用runtime,交换两个方法的实现。什么意思?
顾名思义:方法1:method1 方法2:method2;在开发过程中,在利用runtime对这两个方法的实现进行交换前,我调用method1就会执行method1的实现代码;我调用method2就会执行method2的实现代码。当我们利用runtime交换method1与method2之后,调用method1就会执行method2的实现代码,调用method2就会执行method1的实现代码。
先简单看一下效果:
在工具类中先声明并实现这三个方法
在其他的类中调用截图如下:
下面我们从修改系统的类方法的角度来分析一下runtime交换方法的实现过程。需求:当我们调用[NSDate date]时,返回一个 @"yyy:MM:dd HH:mm:ss";格式且显示当前时间的字符串。这里我们的需求涉及到了改动系统的类方法,所以只能通过runtime实现。要记住:当我们需要修改、完善或者彻底替换系统的某个方法时,一般都会使用到runtime。
1.为NSDate添加分类并实现我们自己想要的效果
2.然后在load方法里面实现方法交换
// 思考:在我们自定义的方法的实现里面,我们用到了需要交换的方法[NSDate date],见图4,return那一行。你认为在这里应不应该这样写了?
正确截图: