Runtime的常用方法(交換方法)
舉個(gè)簡(jiǎn)單的例子就是在我們調(diào)用UIImage的imageNamed方法時(shí)判斷加載的圖片是否成功.
-(void)viewDidLoad {
[super viewDidLoad];
// 在調(diào)用imageNamed時(shí)判斷圖片是否加載成功
UIImage * image = [UIImage imageNamed:@"123"];
}
判斷圖片是否加載成功
首先我們給UIImage創(chuàng)建一個(gè)分類
在.m文件中寫(xiě)一個(gè)我們自己的方法用來(lái)加載圖片和判斷是否加載成功
這里必須使用我們的Cnw_imageNamed方法進(jìn)行賦值,不然會(huì)形成死循環(huán)
+(UIImage *)Cnw_imageNamed:(NSString *)name
{
UIImage * image = [UIImage Cnw_imageNamed:name];
if (image) {
NSLog(@"加載成功");
}else{
NSLog(@"加載失敗 ");
}
return image;
}
在.m文件中我們來(lái)實(shí)現(xiàn)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:));
// 需要交換的兩個(gè)方法
method_exchangeImplementations(imageNamed, Cnw_imageNamed);
});
}