method_exchangeImplementations
1,如果是一個長期的項目驾孔,把所有的imImageNamed:替換成imImageNamed:不是很好的方法政钟,所以可以用運行時機制的方法替換進(jìn)行更改
UIImage *image = [UIImage imImageNamed:@"zhang.png"];
2,所以這里我還是用原來的方法肄满,在運行時調(diào)用原來的方法的時候凹髓,會自動的替換成新的自定義的另外一個方法:
UIImage *image01 = [UIImage imageNamed:@"zhang.png"];
3,一般會在分類的load方法中進(jìn)行方法的運行時替換
#import "UIImage+IMAdds.h"
#import <objc/message.h>
@implementation UIImage (IMAdds)
+ (void)load{
//交換方法需要在load方法中進(jìn)行(這里的操作是類方法的獲取)
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");
//下面調(diào)用imImageNamed:并不會行程循環(huán),因為這個方法實際上已經(jīng)換成imageNamed:方法了粮宛;
UIImage *image = [UIImage imImageNamed:name];
if (!image) {
NSLog(@"圖片不存在");
return nil;
}else{
return image;
}
}
@end
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者