Runtime(一)方法交换

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 对于从事 iOS 开发人员来说,所有的人都会答出【runtime 是运行时】什么情况下用runtime?大部分人能...
    梦夜繁星阅读 3,734评论 7 64
  • 1️⃣runtime介绍: runtime是一套比较底层的纯C语言API, 包含了很多底层的C语言API。在我们平...
    CoderZS阅读 1,082评论 0 7
  • 导读:11、12月注定是不太平的月份,好多小型互联网创业公司都突然崩塌,最近一个朋友跟我抱怨道,说终于感受到了互联...
    柳骏阅读 9,745评论 11 166
  • 一.runtime简介 runtime简称运行时,OC就是运行时机制,其中最主要的就是消息机制。对于C语言,函数的...
    时光作祟不朽间阅读 353评论 0 3
  • 半年就这样过去了,还记得半年之前给自己规划新的一年里要实现什么目标,要攒多少钱,要看多少书,要读多少英语,要在人力...
    独慎阅读 301评论 0 0