美文网首页
RunTime动态添加实例方法

RunTime动态添加实例方法

作者: 330b92bcaf74 | 来源:发表于2017-07-22 15:58 被阅读0次

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


#import "Teacher.h"
#import <objc/runtime.h>

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动态添加实例方法

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