首先需要加上头文件#import<objc/runtime.h>和#Import<objc/message.h>
 
将A中的某个方法替换成B中某个方法,且没有任何的耦合
这里是RuntimeCar中的代码
+ (void)load {
    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");
}

在Car中只需要在.h和.m中加上相应的代码
最后直接调用Car中的run方法,对于什么时候运行的RuntimeCar中load方法
   网上资料:iOS会在运行期提前并且自动调用这两个方法+(void)initialize和+(void)load

初识runtime的更多相关文章

  1. 初识 Runtime

    前言 之前在看一些第三方源码的时候,时不时的能碰到一些关于运行时相关的代码.于是乎,就阅读了一些关于运行时的文章,感觉写的都不错,写此篇文章为了记录一下,同时也重新学习一遍. Runtime简介 Ru ...

  2. Runtime-b

    感谢大神分享 依旧是网上很多runtime的资料,依旧是看不懂,,,这里给大家转化一下runtime,使它由隐晦难懂变得通俗易懂. (虽然截图和语言组织的有些凌乱,但是大家还是一点一点的阅读下去吧,可 ...

  3. Objective-C 中的Runtime的使用

    Runtime的使用 一直以来,OC被大家冠以动态语言的称谓,其实是因为OC中包含的runtime机制.Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平 ...

  4. Objective-C runtime初识

    Objective-C Runtime Describes the macOS Objective-C runtime library support functions and data struc ...

  5. Runtime初识

    什么是Runtime   我们写的代码在程序运行过程中都会被转化成runtime的C代码执行,例如[target doSomething];会被转化成objc_msgSend(target, @sel ...

  6. Java初识

    基础概念 特点: 完全面向对象,动态 解释性,简单.易移植,跨平台 安全健壮,高性能 多线程,分布式 三种核心机制: Java虚拟机 Java Virtual Machine 垃圾收集机制 Garba ...

  7. C#脚本引擎 CS-Script 之(一)——初识

    最近在做新产品,这个产品需要满足不同项目对于系统的定制性数据处理需求,比如有的要统计一段时间内某开关打开关闭了多少次,有的要统计一段时间内空调的使用率,有的希望根据温度来控制空调的开还是关,有的则是希 ...

  8. XSS 自动化检测 Fiddler Watcher & x5s & ccXSScan 初识

    一.标题:XSS 自动化检测 Fiddler Watcher & x5s  & ccXSScan 初识     automated XSS testing assistant 二.引言 ...

  9. iOS 开发-- Runtime 1小时入门教程

    1小时让你知道什么是Objective-C Runtime,并对它有一定的基本了解,可以在开发过程中运用自如. 三.Objective-C Runtime到底是什么东西? 简而言之,Objective ...

随机推荐

  1. Codeforces Round #178 (Div. 2)

    A. Shaass and Oskols 模拟. B. Shaass and Bookshelf 二分厚度. 对于厚度相同的书本,宽度竖着放显然更优. 宽度只有两种,所以枚举其中一种的个数,另一种的个 ...

  2. TCP和UDP的联系和用途

    一.区别        二者都是有用的和常用的,如果纯粹从概念上区分二者就比较费解了,我们直接从功能上进行区分,简单明了:        这两种传输协议也就是合于适配不同的业务和不同的硬件终端.    ...

  3. 51nod 矩阵快速幂(模板题)

    1113 矩阵快速幂  基准时间限制:3 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 给出一个N * N的矩阵,其中的元素均为正整数.求这个矩阵的M次方.由于M次方的计算结果太大 ...

  4. vue-cli3 使用 svg-sprite-loader 的坑

    chainWebpack: config => { config.module.rules.delete("svg"); //重点:删除默认配置中处理svg, //const ...

  5. ajaxStart()和ajaxStop()方法

    使用ajaxSetup()方法设置全局Ajax默认选项 使用ajaxSetup()方法可以设置Ajax请求的一些全局性选项值,设置完成后,后面的Ajax请求将不需要再添加这些选项值,它的调用格式为: ...

  6. Scala中的函数表达式

    最近看Spark的东西,由于之前没有接触过lambda函数表达式,所以搜了点资料,特地纪录在此 Scala中的Lambda表达式 在函数式编程中,函数是基本的构造块.Scala融合了java中的面向对 ...

  7. UVA - 11475 Extend to Palindrome (后缀数组)

    Your task is, given an integer N, to make a palidrome (word that reads the same when you reverse it) ...

  8. Java 高效代码50例

    导读 世界上只有两种物质:高效率和低效率:世界上只有两种人:高效率的人和低效率的人.----萧伯纳 常量&变量 直接赋值常量,禁止声明新对象 直接赋值常量值,只是创建了一个对象引用,而这个对象 ...

  9. codeforces 677D(分层图dp)

    Codeforces 677D 传送门:https://codeforces.com/contest/677/problem/D 题意: 给你一个n*m的方格图,每个点有一个权值val,现在要求你从坐 ...

  10. 由“Sysnative”引发的思考

    在64位的Windows系统中,有个非常神秘的文件夹“Sysnative”,你无法通过Explorer去访问它,甚至你都无法找到它,但它却扮演了一个非常重要的角色.下面我们就来聊聊它. 32位和64位 ...