iOS开发iOS学习开发iOS Developer

Runtime(一)方法交换

2017-09-19  本文已影响32人  Nbm

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方法

上一篇 下一篇

猜你喜欢

热点阅读