Runtime(一)方法交换

作者: Nbm | 来源:发表于2017-09-19 16:53 被阅读32次

Runtime的常用方法(交换方法)

举个简单的例子就是在我们调用UIImage的imageNamed方法时判断加载的图片是否成功.

-(void)viewDidLoad {
[super viewDidLoad];
// 在调用imageNamed时判断图片是否加载成功
UIImage * image = [UIImage imageNamed:@"123"];
}

判断图片是否加载成功

首先我们给UIImage创建一个分类

在.m文件中写一个我们自己的方法用来加载图片和判断是否加载成功

这里必须使用我们的Cnw_imageNamed方法进行赋值,不然会形成死循环

+(UIImage *)Cnw_imageNamed:(NSString *)name
{
UIImage * image = [UIImage Cnw_imageNamed:name];
if (image) {
NSLog(@"加载成功");
}else{
NSLog(@"加载失败 ");
}
return image;
}

在.m文件中我们来实现Runtime的方法交换

+(void)initialize
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// 使用runtime方法交换
// 方法1
Method imageNamed = class_getClassMethod(self, @selector(imageNamed:));
// 需要替换的方法
Method Cnw_imageNamed = class_getClassMethod(self, @selector(Cnw_imageNamed:));
// 需要交换的两个方法
method_exchangeImplementations(imageNamed, Cnw_imageNamed);
});
}

这样运行的时候调用imageNamed方法时就会直接调用Cnw_imageNamed方法

相关文章

  • runtime

    runtime交换方法 动态添加方法

  • runTime常用方法

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

  • Runtime

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

  • Day3

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

  • runtime的理解(二)

    主要内容 利用 runtime 交换方法 利用 runtime 动态添加方法 利用 runtime 动态添加属性 ...

  • 查看SDK调用支付宝参数

    使用runtime 方法交换openurl

  • iOS -- runtime的应用

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

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

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

  • Runtime应用之交换方法实现

    Runtime一个常用的场景是交换方法的调用。其实就是利用了Runtime的方法交换,具体代码如下: 核心思路是先...

  • iOS runtime如何交换两个类方法

    如有转载,请标明出处:iOS runtime如何交换两个类方法 runtime交换实例方法,老生常谈的问题,很多b...

网友评论

    本文标题:Runtime(一)方法交换

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