文档章节

[10秒学会] - runtime之动态添加方法

赵大财
 赵大财
发布于 2016/06/05 11:30
字数 255
阅读 46
收藏 0
// 定义函数
// 没有返回值,参数(id,SEL)
// void(id,SEL)
void daCai(id self, SEL _cmd, id param1)
{
    
    NSLog(@"调用eat %@ %@ %@",self,NSStringFromSelector(_cmd),param1);
}

// 默认一个方法都有两个参数,self,_cmd,隐式参数
// self:方法调用者
// _cmd:调用方法的编号

// 动态添加方法,首先实现这个resolveInstanceMethod
// resolveInstanceMethod调用:当调用了没有实现的方法没有实现就会调用resolveInstanceMethod
// resolveInstanceMethod作用:就知道哪些方法没有实现,从而动态添加方法
// sel:没有实现方法


+ (BOOL)resolveInstanceMethod:(SEL)sel
{
    //    NSLog(@"%@",NSStringFromSelector(sel));
    
    // 动态添加eat方法
    
    if (sel == @selector(eat:)) {
        
        /*
         cls:给哪个类添加方法
         SEL:添加方法的方法编号是什么
         IMP:方法实现,函数入口,函数名
         types:方法类型
         */
        // @:对象 :SEL
        class_addMethod(self, sel, (IMP)daCai, "v@:@");
        
        
        // 处理完
        return YES;
        
    }
    
    
    return [super resolveInstanceMethod:sel];
}

 [p performSelector:@selector(eat:) withObject:@111];

 

//忽略警告

#pragma clang diagnostic push

#pragma clang diagnostic ignored "-Wundeclared-selector"

    if (sel == @selector(eat:)) {

#pragma clang diagnostic pop

© 著作权归作者所有

赵大财
粉丝 22
博文 162
码字总数 38743
作品 0
长沙
私信 提问
[10秒学会] - runtime之添加动态属性

前言:我是赵大财,10秒学会系列,绝不废话连篇! 力求10秒,让你了解会用改知识点 作用:category中需要自己的属性 普通类h 普通类m 分类h 分类m

赵大财
2016/04/04
60
0
[Runtime]-动态添加属性

1:动态添加属性? 给系统的类添加属性的时候,可以使用runtime的动态添加属性方法 >2:如需求:让一个NSObject类 保存一个字符串? 首先:我们想要给系统的类进行拓展功能或者添加属性是拿不到...

XJDomain
2016/08/07
21
0
[Runtime]-动态添加方法

有没有使用过performSelector, 使用过 什么时候使用? 动态添加方法的时候使用过 怎么动态添加方法? 使用runtime 为什么要动态添加方法? OC都是懒加载机制,只要一个方法实现了,就会马上添...

XJDomain
2016/08/03
100
0
iOS进阶之runtime作用

图片来源于网络 前言 Runtime基本是用C和汇编写的,可见苹果为了动态系统的高效而作出的努力。你可以在这里下到苹果维护的开源代码。苹果和GNU各自维护一个开源的runtime版本,这两个版本之间...

DWade_Coding
2017/10/09
0
0
iOS-RunTime,不再只是听说

一. RunTime简介 RunTime简称运行时。OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制。 对于C语言,函数的调用在编译的时候会决定调用哪个函数,如果调用未实现的函...

xx_cc
2016/10/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
7
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0
Docker容器实战(七) - 容器中进程视野下的文件系统

前两文中,讲了Linux容器最基础的两种技术 Namespace 作用是“隔离”,它让应用进程只能看到该Namespace内的“世界” Cgroups 作用是“限制”,它给这个“世界”围上了一圈看不见的墙 这么一...

JavaEdge
今天
8
0
文件访问和共享的方法介绍

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号...

老孟的Linux私房菜
今天
7
0
面试套路题目

作者:抱紧超越小姐姐 链接:https://www.nowcoder.com/discuss/309292?type=3 来源:牛客网 面试时候的潜台词 抱紧超越小姐姐 编辑于 2019-10-15 16:14:56APP内打开赞 3 | 收藏 4 | 回复24 ...

MtrS
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部