文档章节

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

赵大财
 赵大财
发布于 2017/04/27 14:05
字数 170
阅读 10
收藏 0
//
//  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

 

© 著作权归作者所有

共有 人打赏支持
赵大财
粉丝 22
博文 162
码字总数 38743
作品 0
长沙
私信 提问
iOS底层原理总结 - 探寻Runtime本质(三)

方法调用的本质 本文我们探寻方法调用的本质,首先通过一段代码,将方法调用代码转为c++代码查看方法调用的本质是什么样的。 通过上述源码可以看出c++底层代码中方法调用其实都是转化为 函数...

xx_cc
07/02
0
0
java的动态代理机制详解

在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的我们的功能...

小风89
2016/06/28
25
0
java的动态代理

在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的我们的功能...

双月通天
2016/07/08
48
0
Spring注解@Async和@Transactional失效问题究竟是什么原因,强势解释一波

原文作者:弥诺R 原文地址:http://www.minuor.com/1524750647/article 转载声明:转载请注明原文地址,注意版权维护,谢谢! 提前说说 项目中涉及到的代码我都会上传到码云(gitee)或者githu...

兴趣e族
04/28
0
0
java 动态代理 及jdk和cglib的区别

在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的我们的功能...

zh151832
2016/03/16
204
0

没有更多内容

加载失败,请刷新页面

加载更多

python自然语言处理快速入门2常见的NLP操作

在本章中,我们将讨论我们文本数据进行的一些常见数据预处理操作,以适配典型的机器学习算法,如贝叶斯、决策树,逻辑回归等等。这些算法都只适用于数字向量,而不是文本。 那么我们如何将文...

python测试开发人工智能安全
16分钟前
0
0
OSChina 周一乱弹 —— 温柔的人应该这样

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @clouddyy :#每日一歌# 《フィクション-sumika》 《フィクション-sumika》 手机党少年们想听歌,请使劲儿戳(这里) 假期时间干嘛去, @for...

小小编辑
33分钟前
9
4
[LintCode] Serialize and Deserialize Binary Tree(二叉树的序列化和反序列化)

描述 设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。 如何反序列化或序列化二叉树是没有限制的,你...

honeymose
今天
6
0
java框架学习日志-7(静态代理和JDK代理)

静态代理 我们平时去餐厅吃饭,不是直接告诉厨师做什么菜的,而是先告诉服务员点什么菜,然后由服务员传到给厨师,相当于服务员是厨师的代理,我们通过代理让厨师炒菜,这就是代理模式。代理...

白话
今天
26
0
Flink Window

1.Flink窗口 Window Assigner分配器。 窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。 一种经典的窗口分类可以分成: 翻...

满小茂
今天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部