Runtime(动态添加方法)笔记

OC采用的是懒加载机制,只要一个方法实现了,就会添加到方法列表中占用内存。而很多时候,很多功能在某些用户那里是很少用到的,比如腾讯的xx会员,你不充值,是无法使用会员提供的服务的。这种情况下,可以考虑使用Runtime动态添加方法。

Demo链接

  • ViewController.m
- (void)viewDidLoad {
    [super viewDidLoad];

    TestModel *testModel = [[TestModel alloc] init];

    //performSelector在动态添加方法时使用
    [testModel performSelector:@selector(write:)
                    withObject:@"动态添加方法测试"];
}
  • TestModel.m:创建TestModel用于Runtime测试动态添加方法
#import "TestModel.h"
#import <objc/message.h>//用于导入Runtime

@implementation TestModel
void writeChange(id self,SEL _cmd,NSString *str)
{
    NSLog(@"测试动态添加方法:%@",str);
}

//只要一个对象调用了一个未实现的方法就会调用这个方法进行处理,用于动态添加方法时,处理未实现方法
+ (BOOL)resolveInstanceMethod:(SEL)sel
{
    //找到未实现的方法
    if (sel == NSSelectorFromString(@"write:")) {

        /**
         * 动态添加方法

         * 参数1 添加方法的类
         * 参数2 添加哪个方法
         * 参数3 方法实现,替换方法(其实是函数)
         * 参数4 方法类型,参考文档 Type Encodings
         */
        class_addMethod(self, sel, (IMP)writeChange, "v@:@");
        return YES;
    }

    return [super resolveInstanceMethod:sel];
}

@end
  • 运行效果
    动态添加方法测试效果图
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值