美文网首页
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