zoukankan      html  css  js  c++  java
  • Runtime(运行时)003-动态添加方法

    class_addMethod

    #import "Person.h"

    #import <objc/message.h>

    @implementation Person

    /*

     OC的方法调用,会传递两个隐式参数!给IMP(方法实现)!!

     objc_msgSend(self,_cmd);

     id self 方法调用者

     SEL _cmd 方法编号

     */

    //instanceMethod 实例方法  classMethod 类方法

    //如果该类接收到一个没有实现的实例方法,就会来到这里

    +(BOOL)resolveInstanceMethod:(SEL)sel {

        //NSLog(@"%@",NSStringFromSelector(sel));

        //动态添加一个方法!!

        /*

         1.class 哪个类

         2.SEL

         3.IMP 函数的指针

         4.返回值类型

         */

        class_addMethod(self, sel, (IMP)haha, "v@:@");

        return [super resolveInstanceMethod:sel];

    }

    void haha(id obj, SEL sel , NSString*objc) {

        //NSLog(@"吃到了%@",objc);

        //obj 调用者

        //sel 方法编号

        //objc 参数

        NSLog(@"%@--%@--%@",obj,NSStringFromSelector(sel),objc);//(null)--eat:--汉堡!!

        //objc_msgSend(p,@selector(eat:),@"汉堡");

    }

    void myMethodIMP(id self, SEL _cmd)//默认参数

    {

        // implementation ....

    }

  • 相关阅读:
    编程日志 Vue-element-admin
    JS判断全屏,Jquery绑定动态元素Parent元素单击事件
    查询所有表内容-SQL
    正则分割获取字符串中的数字部分(包括连续数字)(连续数字的分割获取)
    nginx本地正常访问,外网无法访问
    nuget 配置无效
    URL获取上级目录
    VS 调试项目运行不发布,允许其他网内直接访问
    小数(decimal,double) 截取两位或多位,不四舍五入
    Linq简单语句记录
  • 原文地址:https://www.cnblogs.com/StevenHuSir/p/Runtime_AddMethod.html
Copyright © 2011-2022 走看看