1.首先导入头文件<objc/message.h>
2.编写MyImageNamed:方法
// 运行时
// 先写一个其他方法,实现这个功能
// 在分类里面不能调用super,分类木有父类
//+ (UIImage *)imageNamed:(NSString *)name
//{
// [super im]
//}
+ (UIImage *)MyImageNamed:(NSString *)imageName
{
// 1.加载图片
UIImage *image = [UIImage MyImageNamed:imageName];
// 2.判断功能
if (image == nil) {
NSLog(@"加载image为空");
}
return image;
}
3.在使用之前调用交换方法,这里交换的两个方法分别是imageNamed: 和MyImageNamed:
// 交换方法实现,方法都是定义在类里面
// class_getMethodImplementation:获取方法实现
// class_getInstanceMethod:获取对象
// class_getClassMethod:获取类方法
// IMP:方法实现
// imageNamed
// Class:获取哪个类方法
// SEL:获取方法编号,根据SEL就能去对应的类找方法
Method imageNameMethod = class_getClassMethod([UIImage class], @selector(imageNamed:));
// MyImageNamed
Method MyImageNamedMethod = class_getClassMethod([UIImage class], @selector(MyImageNamed:));
// 交换方法实现
method_exchangeImplementations(imageNameMethod, MyImageNamedMethod);