码迷,mamicode.com
首页 > 其他好文 > 详细

Runtime(运行时)003-动态添加方法

时间:2018-06-29 11:08:40      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:obj   strong   self   message   person   method   oid   函数   send   

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

}

Runtime(运行时)003-动态添加方法

标签:obj   strong   self   message   person   method   oid   函数   send   

原文地址:https://www.cnblogs.com/StevenHuSir/p/Runtime_AddMethod.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!