美文网首页
rutime动态添加方法

rutime动态添加方法

作者: cj小牛 | 来源:发表于2016-06-06 22:29 被阅读38次

    import "ViewController.h"

    import "Person.h"

    @interface ViewController ()

    @end

    @implementation ViewController

    • (void)viewDidLoad {
      [super viewDidLoad];
      Person *p = [[Person alloc]init];
      // performSelector 动态添加方法
      // [p performSelector:@selector(eat)];
      [p performSelector:@selector(eat:) withObject:@111];
      }

    @end

    import "Person.h"

    import <objc/message.h>

    @implementation Person

    // 定义一个函数 这个就是动态添加的方法
    void aaa(id self, SEL _cmd ,id param){

    NSLog(@"这个就是eat方法%@",param);
    

    }

    void dynamicMethodIMP(id self, SEL _cmd) {
    // 默认的方法有2个参数 self :方法调用者
    // ——cmd 调用参数的编号 这两个参数是隐新参数
    }
    // 动态天假方法首先要实现reslveinstancemethod
    // resloveInstanceMethod 调用 :当一个方法没有实现但是又吊用了这个方法就会调用 resolveInstanceMethod
    // resloveInstanceMethod 作用:就知道了哪些方法没有实现就可以动态的添加方法
    // sel:没有实现的方法

    +(BOOL)resolveInstanceMethod:(SEL)sel{

    NSLog(@"%@",NSStringFromSelector(sel));
    if(sel == @selector(eat:)){
      // 参数: clas  给哪个类添加方法  sel :添加方法的编号 imp 方法的实现(函数的入口,函数的指针 函数名) types 方法的类型
    

    这里的参数v代表void ,@代表 对象 :代表sel @代表 Id
    class_addMethod(self, sel, (IMP)aaa, "v@:@");
    return YES;
    }

    return [super resolveInstanceMethod:sel];
    

    }

    相关文章

      网友评论

          本文标题:rutime动态添加方法

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