Runtime(动态添加方法)笔记

来源:互联网 发布:淘宝海尔官方旗舰店 编辑:程序博客网 时间:2024/05/16 05:14

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 TestModelvoid 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
原创粉丝点击