• 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 ....

    }

  • 相关阅读:
    工作之余
    用MFC如何高效地绘图
    C++运算符优先级
    CentOS5.9下用Kate
    3G门户网(3G.cn) 招聘 软件测试工程师
    深圳市东润信息咨询有限公司招聘职位: 3G无线产品经理
    广州杰赛科技股份有限公司 招聘 技术中心3G协议软件工程师
    3G门户网(3G.cn) 招聘 手机游戏开发工程师
    3G门户网(3G.cn) 招聘 技术支持工程师
    3G工程师:三大热门的3G职业资格培训认证
  • 原文地址:https://www.cnblogs.com/StevenHuSir/p/Runtime_AddMethod.html
Copyright © 2020-2023  润新知