动态添加方法 并且动态的执行 有类方法 对象方法

本文介绍了如何使用Objective-C运行时API来动态地为一个类添加方法,并展示了如何调用这些方法。通过具体的代码实例,文章详细解释了动态方法添加的过程及其应用场景。
//
//  ViewController.m
//  TESTzz
//
//  Created by point on 2017/4/27.
//  Copyright © 2017年 dacai. All rights reserved.
//

#import "ViewController.h"
#import "DCModel.h"
#import <objc/message.h>

static SEL         _dcSel;
static SEL         _dcSel2;
@interface ViewController ()
{
    Class       _dcModelClass;
}
@end


@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //动态的 添加方法
    _dcModelClass = NSClassFromString(@"DCModel"); //这样的写法 不用头文件也可
    //[DCModel class] 必须包含头文件
    _dcSel = NSSelectorFromString(@"run:");
    class_addMethod(_dcModelClass, _dcSel, (IMP)aaa, "v@:@");
    
    //执行方法
    static void(*action)(id, SEL,NSNumber *) = (void(*)(id, SEL,NSNumber *))objc_msgSend;
    id controller = [[_dcModelClass alloc] init]; //这样执行对象方法
    action(controller, _dcSel,@(100));
    
    _dcSel2 = NSSelectorFromString(@"run");
    static void(*action2)(id, SEL) = (void(*)(id, SEL))objc_msgSend;
    action2(_dcModelClass, _dcSel2); //这个执行的是类方法
}

void aaa(id self, SEL _cmd, NSNumber *meter) {
    NSLog(@"跑了%@", meter);
}




@end

 

转载于:https://my.oschina.net/zhaodacai/blog/888326

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值