rutime动态添加方法

2016-06-06  本文已影响38人  cj小牛

import "ViewController.h"

import "Person.h"

@interface ViewController ()

@end

@implementation ViewController

@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];

}

上一篇下一篇

猜你喜欢

热点阅读