method_exchangeImplementations注解
method_exchangeImplementations(<#Method _Nonnull m1#>, <#Method _Nonnull m2#>)
//method_exchangeImplementations來把一個方法與另外一個方法進行交換。
先看代碼如下:
演示用的Person類
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property(nonatomic, assign) NSInteger age;
@property(nonatomic, copy) NSString * name;
+(Person *)sharedManager;
- (instancetype)init;
+ (void) printDZ;
- (void) printDZL;
@end
import "Person.h"
@interface Person ()
@property(nonatomic, strong) NSString * sex;
@end
@implementation Person
+(Person *)sharedManager {
static Person *sharedManager;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedManager = [[Person alloc] init];
});
return sharedManager;
}
- (instancetype)init {
self = [super init];
if (self) {
self.sex = @"---女--";
self.age = 10;
self.name = @"布蘭妮";
}
return self;
}
+ (void)printDZ
{
// NSLog(@"this is a class method for %@",NSStringFromClass([self class]));
NSLog(@"this is a class method from %@",NSStringFromSelector(_cmd));
}
- (void)printDZL {
NSLog(@"this is a instance method from %@",NSStringFromSelector(_cmd));
// NSLog(@"this is a instance method for %@",NSStringFromClass([self class]));
}
@end
測試代碼:
#import "ViewController.h"
#import "Person.h"
#import <objc/runtime.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
Person *p1 = [Person new];
Method m1 = class_getClassMethod([Person class],@selector(printDZ));
Method m2 = class_getInstanceMethod([p1 class], @selector(printDZL));
NSLog(@"測試前");
[Person printDZ];
[p1 printDZL];
method_exchangeImplementations(m1, m2);
NSLog(@"測試后:");
[Person printDZ];
[p1 printDZL];
}
@end
打印結(jié)果:
打印截圖.png
方法的初步運用很簡單焚刺,就不加多做解釋了市殷,只要敲一遍卖鲤,立馬就懂了