美文网首页
iOSRuntime之method_exchangeImplem

iOSRuntime之method_exchangeImplem

作者: 镜花水月cy | 来源:发表于2017-12-17 11:02 被阅读20次

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
方法的初步运用很简单,就不加多做解释了,只要敲一遍,立马就懂了

相关文章

  • iOSRuntime之method_exchangeImplem

    method_exchangeImplementations注解 先看代码如下: 演示用的Person类 测试代码...

  • iOSRuntime之objc_setAssociatedObj

    一.objc/runtime.h相关介绍 Objecitve-C的重要特性是Runtime(运行时),在Inter...

  • swizling - method_exchangeImplem

    每天进步一点点,由浅入深,不急不躁。。又到了快乐的coding时间,下面开始介绍的是,大家熟知的swizl...

  • IOSRunTime_方法交换

    RunTime_运行时详解 运行时机制: 消息发送机制: RunTime 运行时:苹果提供了一个API,属于C语言...

  • iOS的Category底层解析

    一 ,category简介 本文是自我学习iOSruntime的过程中学习的Category的一个自我学习和总结的...

  • iOSRuntime的成员与属性

    一、成员变量 1.1 Ivar Ivar: 实例变量类型,是一个指向objc_ivar结构体的指针 而objc_i...

  • IOSRunTime_动态添加方法

    利用RunTime运行时,动态添加一个方法 动态添加方法,首先实现这个resolveInstanceMethod ...

  • iOS Runtime的学习和总结

    一,概述 本文主要是针对iOSruntime 的一个自我学习和总结的过程。记录自己学习过程中以及面试过程中遇到的各...

  • IOSRunTime_OC的序列化

    利用RunTime运行时,遍历一个类的所有属性和方法。 序列化-----归档 反序列化--解档 在iOS中一个自定...

  • 十之

    博学之,审问之,慎思之,明辨之,笃行之。 励志之,健身之,涅槃之,弘毅之,自强之!

网友评论

      本文标题:iOSRuntime之method_exchangeImplem

      本文链接:https://www.haomeiwen.com/subject/ykdswxtx.html