iOSRuntime之method_exchangeImplementations (方法交換)

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

打印結果:

打印截圖.png

方法的初步運用很簡單,就不加多做解釋了,只要敲一遍,立馬就懂了

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。