如何通过不去手动一个个修改每个UIImage的imageNamed:方法就可以实现为该方法中加入版本判断语句?
-
步骤
- 1.为UIImage建一个分类(UIImage+Category)
- 2.在分类中实现一个自定义方法,方法中写要在系统方法中加入的语句,比如版本判断
+ (UIImage *)fy_imageNamed:(NSString *)name { double version = [[UIDevice currentDevice].systemVersion doubleValue]; if (version >= 7.0) { // 如果系统版本是7.0以上,使用另外一套文件名结尾是‘_os7’的扁平化图片 name = [name stringByAppendingString:@"_os7"]; } return [UIImage fu_imageNamed:name]; }
- 3.分类中重写UIImage的load方法,实现方法的交换(只要能让其执行一次方法交换语句,load再合适不过了)
+ (void)load { // 获取两个类的类方法 Method m1 = class_getClassMethod([UIImage class], @selector(imageNamed:)); Method m2 = class_getClassMethod([UIImage class], @selector(fy_imageNamed:)); // 开始交换方法实现 method_exchangeImplementations(m1, m2); }