【iOS分享之路-快速上手Runtime】三、动态添加方法

duwenquan-方形LOGO.png

引述

在我们的iOS开发过程中,如果一个类方法非常多,加载类到内存的时候也比较耗费资源,需要给每个方法生成映射表,可以使用动态给某个类,添加方法解决。做到优化内存,节省资源的效果。

Runtime动态添加方法

动态给某个类添加方法的步骤,假如我们定义一个Cat类,给他动态添加一个eat的方法。

  • 1.动态添加方法,首先实现这个resolveInstanceMethod
    resolveInstanceMethod调用:当调用了没有实现的方法没有实现就会调用resolveInstanceMethod
    resolveInstanceMethod作用:就知道哪些方法没有实现,从而动态添加方法
    sel:没有实现方法
  • 2.然后调用 class_addMethod方法,参数解释:
    cls:给哪个类添加方法
    SEL:添加方法的方法编号是什么
    IMP:方法实现,函数入口,函数名
    types:方法类型 可查看官方文档查询:Type Encodings
+ (BOOL)resolveInstanceMethod:(SEL)sel
{
    //    NSLog(@"%@",NSStringFromSelector(sel));
    // 动态添加eat方法
    
    if (sel == @selector(eat:)) {
        /*
         cls:给哪个类添加方法
         SEL:添加方法的方法编号是什么
         IMP:方法实现,函数入口,函数名,需要定义一个函数,也就是方法的实现部分
         types:方法类型,如何知道类型,
         */
        // @:对象 :SEL
        class_addMethod(self, sel, (IMP)eatFunc, "v@:@");    
        // 处理完
        return YES;
    }
    
    return [super resolveInstanceMethod:sel];
}

  • 3.在需要的地方动态添加方法,先引用头文件,然后通过performSelector调用方法
dynamicADD.png

Runtime动态添加方法的实现Demo

Runtime动态添加方法demo
广大书友记得给个喜欢,在GitHub上给个Star噢!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,845评论 0 9
  • 对于从事 iOS 开发人员来说,所有的人都会答出【runtime 是运行时】什么情况下用runtime?大部分人能...
    梦夜繁星阅读 9,085评论 7 64
  • 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的...
    西木阅读 30,719评论 33 466
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,707评论 25 709
  • 对于很多职场“老手”来说,丰富的阅人经验可以让TA们在最短的时间内,通过种种细节,判断一个人是“同道中人”,还是职...
    Joeycheung礼仪培训师阅读 5,327评论 0 0