zoukankan      html  css  js  c++  java
  • 使用RunTime添加动态方法、方法交换、获取所有属性来重写归档解档

    #import "JZGMMMMModel.h"
    #import <objc/message.h>
    @implementation JZGMMMMModel
    //**动态添加方法
    void addmethod(id self, SEL _cmd)
    {
        NSLog(@"addmethod");
    }
    +(BOOL)resolveInstanceMethod:(SEL)sel
    {
        class_addMethod([self class], @selector(addmethod), (IMP)addmethod, "v@:");
        return [super resolveInstanceMethod:sel];
    }
    
    
    
     +(void)load
    {
        // 获取原始setBackgroundColor方法
        Method originalM = class_getInstanceMethod([self class], @selector(setBackgroundColor:));
        
        // 获取自定义的pb_setBackgroundColor方法
        Method exchangeM = class_getInstanceMethod([self class], @selector(pb_setBackgroundColor:));
        method_exchangeImplementations(originalM, exchangeM);
    }
    // 自定义的方法
    -(void)pb_setBackgroundColor:(UIColor *) color{
        
        NSLog(@"%s",__FUNCTION__);
        
        /*
         1.更改颜色
         2.所有继承自UIView的控件,设置背景色都会设置成自定义的'orangeColor'
         3. 此时调用的方法 'pb_setBackgroundColor' 相当于调用系统的 'setBackgroundColor' 方法,原因是在load方法中进行了方法交换.
         4. 注意:此处并没有递归操作.
         *//*
        [self pb_setBackgroundColor:[UIColor orangeColor]];
    }
    
    连接 :http://www.jianshu.com/p/ab966e8a82e2
  • 相关阅读:
    29 求和
    28 跳转控制语句 goto
    27 跳转控制语句 continue
    26 跳转控制语句 break
    25 打印金字塔
    24 打印九九乘法表
    23 多重循环控制
    22 do-while 循环
    21 while 循环
    20 for循环控制
  • 原文地址:https://www.cnblogs.com/mkai/p/6627717.html
Copyright © 2011-2022 走看看