iOS —— RunTime詳解(交換方法)二
阿新 • • 發佈:2018-11-15
一、交換方法
開發使用場景:系統自帶的方法功能不夠,給系統自帶的方法擴充套件一些功能,並且保持原有的功能。
方式一:繼承系統的類,重寫方法
方式二:使用RunTime交換方法
例:
UIImage+Extension.m
ViewController.h#import "UIImage+Extension.h" #import <objc/message.h> @implementation UIImage (Extension) #pragma mark- 載入分類的時候呼叫 +(void)load{ NSLog(@"載入分類的時候呼叫"); //獲得物件方法 // class_getInstanceMethod(<#Class _Nullable __unsafe_unretained cls#>, <#SEL _Nonnull name#>) // 獲得類方法 Method imageNameMethod =class_getClassMethod([UIImage class], @selector(imageNamed:)); Method ymImageMethod=class_getClassMethod([UIImage class], @selector(ym_imageNamed:)); //進行方法呼叫 method_exchangeImplementations(imageNameMethod, ymImageMethod); } +(UIImage*)ym_imageNamed:(NSString *)name { UIImage *image=[UIImage ym_imageNamed:name]; if (image==nil) { NSLog(@"圖片為空"); } return image; } @end
#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //底層呼叫的是:ym_imageNamed [UIImage imageNamed:@"123"]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end