文档章节

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

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

 

© 著作权归作者所有

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

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

xx_cc
07/02
0
0
Spring注解@Async和@Transactional失效问题究竟是什么原因,强势解释一波

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

兴趣e族
04/28
0
0
java的动态代理机制详解

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

小风89
2016/06/28
25
0
iOS-RunTime,不再只是听说

一. RunTime简介 RunTime简称运行时。OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制。 对于C语言,函数的调用在编译的时候会决定调用哪个函数,如果调用未实现的函...

xx_cc
2016/10/15
0
0
Tiny-Spring源码阅读(二)、AOP部分的理解

一、什么是AOP? AOP含义是面向切面编程,它通过类似于横切的技术,剖解开封装对象的内部,并将那些影响了多个类的公共行为封装到一个可重用模块中,把这些模块动态放入对象内部。以此来降低耦...

zq17865815296
2017/11/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

20180920 rzsz传输文件、用户和用户组相关配置文件与管理

利用rz、sz实现Linux与Windows互传文件 [root@centos01 ~]# yum install -y lrzsz # 安装工具sz test.txt # 弹出对话框,传递到选择的路径下rz # 回车后,会从对话框中选择对应的文件传递...

野雪球
今天
0
0
OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
今天
6
2
java -jar运行内存设置

java -Xms64m #JVM启动时的初始堆大小 -Xmx128m #最大堆大小 -Xmn64m #年轻代的大小,其余的空间是老年代 -XX:MaxMetaspaceSize=128m # -XX:CompressedClassSpaceSize=6...

李玉长
今天
1
0
Spring | 手把手教你SSM最优雅的整合方式

HEY 本节主要内容为:基于Spring从0到1搭建一个web工程,适合初学者,Java初级开发者。欢迎与我交流。 MODULE 新建一个Maven工程。 不论你是什么工具,选这个就可以了,然后next,直至finis...

冯文议
今天
1
0
RxJS的另外四种实现方式(四)——性能最高的库(续)

接上一篇RxJS的另外四种实现方式(三)——性能最高的库 上一篇文章我展示了这个最高性能库的实现方法。下面我介绍一下这个性能提升的秘密。 首先,为了弄清楚Most库究竟为何如此快,我必须借...

一个灰
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部