美文网首页
Runtime方法交换机制

Runtime方法交换机制

作者: CharlsPrince | 来源:发表于2017-03-12 17:13 被阅读0次

一、运行时

所谓运行时,就是说程序在运行(或者在被执行时)的状态,运行时对于项目编程来说是一个必要重要的机制,能够帮我们处理很多未知的情况,比如说动态创建类、添加属性、方法等。

二、运用领域

  • 在程序运行时,动态创建一个类
  • 在程序运行时,动态为某类添加属性、方法,修改属性值、方法名称
  • 。。。

三、这里简单说一下方法交换机制

比如说一个工程里面,你们会使用很多系统控件,比如说UIButton,假设有一个需求说要将所有的button的点击标题颜色改成其他的颜色,难道你要一个一个去修改?估计你会想死的心都有,那怎么办?方法交换机制可以帮到你,

原始代码:

    UIButton *runTimeButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [runTimeButton setFrame:CGRectMake(100, 100, 150, 30)];
    [runTimeButton setTitle:@"button" forState:UIControlStateNormal];
    [runTimeButton setTitleColor:[UIColor purpleColor] forState:UIControlStateNormal];
    [runTimeButton setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted];
    [runTimeButton setBackgroundColor:[UIColor whiteColor]];
    [runTimeButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:runTimeButton];

只要新建一个UIButton的分类,实现类似下面的代码就可以实现方法的交换,这样你就可以在不改动原始代码的情况下实现所有按钮的标题颜色

新建分类代码:

+ (void)load {
    Method setTitleColorMethod = class_getInstanceMethod(self, @selector(setTitleColor:forState:));
    Method hyc_setTitleColorMethod = class_getInstanceMethod(self, @selector(hyc_setTitleColor:forState:));
    method_exchangeImplementations(setTitleColorMethod, hyc_setTitleColorMethod);
}

- (void)hyc_setTitleColor:(UIColor *)color forState:(UIControlState)state {
    [self hyc_setTitleColor:[UIColor yellowColor] forState:state];
    if (state == UIControlStateHighlighted) {
        [self hyc_setTitleColor:[UIColor redColor] forState:state];
    }
}

看看效果:

runtime效果.gif

相关文章

  • Runtime 的应用

    前面我们说到:Runtime 消息传递机制Runtime 消息转发机制Runtime 交换方法今天我们来谈谈Run...

  • Runtime

    runtime运行时机制1:通过runtime,实现方法交换(交换两个类方法、交换两个实例方法)2:通过runti...

  • Day3

    1 runtime运行时机制1:通过runtime,实现方法交换(交换两个类方法、交换两个实例方法)。2:通过ru...

  • iOS 防止方法未实现造成的崩溃

    实现原理基于runtime的方法交换和消息发送机制 方法交换 method_exchangeImplementat...

  • ios-面试-runtime中黑魔法方法交换

    方法交换-原理 方法交换,传言中的runtime中的黑魔法! 依据runtime的机制,OC中类生成的对象在运行时...

  • iOS 11 适配 简单粗暴

    1、利用runtime方法交换机制 适配iOS11--contentInsetAdjustmentBehavior

  • 简单适配iOS 11 tableView 刷新问题

    1、利用runtime方法交换机制 适配iOS11--contentInsetAdjustmentBehavior...

  • 怎样设置文本框的光标和占位文字的颜色,且方法的复用性强?

    这里介绍一个可以方便复用的简单方法 runtime 实时机制中有:交换方法和给分类添加属性的功能. 交换方法适用场...

  • RunTime

    1.使用消息发送机制创建对象,给对象发送消息 2. runTime方法交换的使用 3. KVO本质其实也是runtime

  • OC - runtime常见用法小结

    消息机制 - 调用私有方法 OC的runtime特性,使其没有严格意义上的私有方法。 方法交换 很多时候,我们想要...

网友评论

      本文标题:Runtime方法交换机制

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