RunTime动态添加实例方法

动态添加方法,就像懒加载 只有使用的时候才会加到内存中去,这样性能更好。
来不及解释了 直接看如何实现 ```


#import "Teacher.h"
#import 

void eat(id self, SEL sel, NSString *str1, NSString *str2) {
    
    NSLog(@"%@ %@", str1, str2);
}


@implementation Teacher


+ (BOOL)resolveInstanceMethod:(SEL)sel {
    
    if (sel == NSSelectorFromString(@"eat:with:")) {
        
         /**
         *  动态添加方法
         *
         *  self cls:为哪个类添加方法
         *  sel  SEL:添加方法的方法编号(方法名)是什么
         *  IMP  IMP:方法实现
         *  const char * types方法类型
         *
         *  返回是否添加成功
         **/
        BOOL isAddmethod = class_addMethod(self, sel, (IMP)eat, "V#:@@");
        return isAddmethod;
    }
    
    return [super resolveInstanceMethod:sel];
}

@end

外部调用 :

    Teacher *teacher = [[Teacher alloc] init];
    
    [teacher performSelector:@selector(eat:with:) withObject:@"banana" withObject:@"zui"];

暂时写到这里了。

另外.....

我的愿望是.......

世界和平.........

你可能感兴趣的:(RunTime动态添加实例方法)