method_exchangeImplementations
1,如果是一个长期的项目,把所有的imImageNamed:替换成imImageNamed:不是很好的方法,所以可以用运行时机制的方法替换进行更改
UIImage *image = [UIImage imImageNamed:@"zhang.png"];
2,所以这里我还是用原来的方法,在运行时调用原来的方法的时候,会自动的替换成新的自定义的另外一个方法:
UIImage *image01 = [UIImage imageNamed:@"zhang.png"];
3,一般会在分类的load方法中进行方法的运行时替换
#import "UIImage+IMAdds.h"
#import <objc/message.h>
@implementation UIImage (IMAdds)
+ (void)load{
//交换方法需要在load方法中进行(这里的操作是类方法的获取)
Method originalMethod = class_getClassMethod([UIImage class], @selector(imageNamed:));
Method customMethod = class_getClassMethod([UIImage class], @selector(imImageNamed:));
method_exchangeImplementations(originalMethod, customMethod);
}
+ (UIImage *)imImageNamed:(NSString *)name{
NSLog(@"zhangdanfeng");
//下面调用imImageNamed:并不会行程循环,因为这个方法实际上已经换成imageNamed:方法了;
UIImage *image = [UIImage imImageNamed:name];
if (!image) {
NSLog(@"图片不存在");
return nil;
}else{
return image;
}
}
@end