初识runtime
Class orginClass = NSClassFromString(@"Car”); // 这里我对Class的理解是指向这个自定义类的指针
Class currentClass = [self class];
SEL orginSelecter = NSSelectorFromString(@"run:”); // 个人感觉这个SEL是一个函数指针(这里对SEL和Method的理解是这样的,SEL是相对于Class的指向函数的一个指针;而Method是相对于整个内存指向函数的一个指针,Method是需要Class和SEL才能获得。也不知道这里理解的对不对?)
SEL currentSelecter = @selector(runtime_run:);
Method orginMethod = class_getInstanceMethod(orginClass, orginSelecter); // 这个Method似乎也是一个函数指针
Method currentMethod = class_getInstanceMethod(currentClass, currentSelecter);
BOOL results = class_addMethod(orginClass, currentSelecter, method_getImplementation(currentMethod), method_getTypeEncoding(currentMethod)); // 由A中引出一个指针指向B中需要替换的方法(感觉就是将B中的方法加到A中去)
if (!results) {
return;
}
orginMethod = class_getInstanceMethod(orginClass, currentSelecter); // 将Method重新指向,
if (!orginMethod) {
return;
}
class_replaceMethod(orginClass, currentSelecter, method_getImplementation(orginMethod), method_getTypeEncoding(orginMethod));
class_replaceMethod(orginClass, orginSelecter, method_getImplementation(currentMethod), method_getTypeEncoding(currentMethod));
}
- (void)runtime_run:(int)speed {
if (speed < 120) {
NSLog(@"%@ speed:%d", self, speed); // 这里self最后打印出来的,是Car
}
NSLog(@"runtimeMethod");
}
初识runtime的更多相关文章
- 初识 Runtime
前言 之前在看一些第三方源码的时候,时不时的能碰到一些关于运行时相关的代码.于是乎,就阅读了一些关于运行时的文章,感觉写的都不错,写此篇文章为了记录一下,同时也重新学习一遍. Runtime简介 Ru ...
- Runtime-b
感谢大神分享 依旧是网上很多runtime的资料,依旧是看不懂,,,这里给大家转化一下runtime,使它由隐晦难懂变得通俗易懂. (虽然截图和语言组织的有些凌乱,但是大家还是一点一点的阅读下去吧,可 ...
- Objective-C 中的Runtime的使用
Runtime的使用 一直以来,OC被大家冠以动态语言的称谓,其实是因为OC中包含的runtime机制.Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平 ...
- Objective-C runtime初识
Objective-C Runtime Describes the macOS Objective-C runtime library support functions and data struc ...
- Runtime初识
什么是Runtime 我们写的代码在程序运行过程中都会被转化成runtime的C代码执行,例如[target doSomething];会被转化成objc_msgSend(target, @sel ...
- Java初识
基础概念 特点: 完全面向对象,动态 解释性,简单.易移植,跨平台 安全健壮,高性能 多线程,分布式 三种核心机制: Java虚拟机 Java Virtual Machine 垃圾收集机制 Garba ...
- C#脚本引擎 CS-Script 之(一)——初识
最近在做新产品,这个产品需要满足不同项目对于系统的定制性数据处理需求,比如有的要统计一段时间内某开关打开关闭了多少次,有的要统计一段时间内空调的使用率,有的希望根据温度来控制空调的开还是关,有的则是希 ...
- XSS 自动化检测 Fiddler Watcher & x5s & ccXSScan 初识
一.标题:XSS 自动化检测 Fiddler Watcher & x5s & ccXSScan 初识 automated XSS testing assistant 二.引言 ...
- iOS 开发-- Runtime 1小时入门教程
1小时让你知道什么是Objective-C Runtime,并对它有一定的基本了解,可以在开发过程中运用自如. 三.Objective-C Runtime到底是什么东西? 简而言之,Objective ...
随机推荐
- Vue打包文件放在服务器,浏览器存在缓存问题的解决
在入口文件index.html添加 <meta http-equiv="pragram" content="no-cache"> <meta ...
- Git的使用--如何将本地项目上传到Github(两种简单、方便的方法..)
https://blog.csdn.net/u014135752/article/details/79951802 总结:其实只需要进行下面几步就能把本地项目上传到Github 1.在本地创建一个版本 ...
- centos7中安装R之前yum依赖的包
#!/bin/bash echo "#########################开始安装依赖环境#####################" yum -y install g ...
- 移动端开发touchstart,touchmove,touchend事件详解和项目
移动端开发touchstart,touchmove,touchend事件详解和项目 最近在做移动端的开发,在一个“服务商管理”页面使用到了触摸事件"touchstart",&quo ...
- SRTE测试
网络拓扑: XRV1 ======================================================================= hostname XRV1expl ...
- Python8_关于编码解码和utf-8
关于编码:ASCII码是早期的编码规范,只能表示128个字符.7位二进制数表示 扩展ASCII码,由于ASCII码不够用,ASCII表扩充到256个符号,不同的国家有不同的标准:8位二进制数 Unic ...
- tcp短连接和长连接
1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次 ...
- Excel读取方式优化(浅谈对规律的认知)
相信大家都接触过对Excel的读取,今天突发奇想,想将自己的一小段经历分享出来.灵活识别列名并将其存到对象数组中. 固定形式的Excel列的读取: 源于我第一次操作Excel,将列名对应成table中 ...
- Github安装和使用(超级详细)
Github (原创:黑小子-余) 小编我是一名Git新手,然后花三天时间通过查找网上资料,了解Git的简单使用.本次我就实战操作git安装.github仓库创建.上传代码到github上.从gith ...
- 使用springboot + druid + mybatisplus完成多数据源配置
一. 简介 1. 版本 springboot版本为2.0.3.RELEASE,mybatisplus版本为2.1.9, druid版本为1.1.9,swagger版本为2.7.0 2. 项目地址 ...