美文网首页
02.消息机制

02.消息机制

作者: 白开了杯水 | 来源:发表于2021-09-09 17:51 被阅读0次

之前内容:
01Class的结构

消息机制大概可以分为三个阶段(个人理解)

  • 消息发送阶段
  • 方法动态解析阶段
  • 消息转发阶段
消息发送

所有的方法最终会转为objc_msgSend调用,那么我们只需要了解objc_msgSend做了什么就可以了,直接看源码,搜索objc_msgSend,一步步找,最终你会找到这个函数lookUpImpOrForward,原图如图

lookUpImpOrForward源码1.png lookUpImpOrForward源码2.png lookUpImpOrForward源码3.png

从图中代码可以看出,消息发送的一个流程,整理了一下,大概如下:

消息发送流程.png
动态方法解析

动态方法解析其实就是找不到方法后,会尝试找一下方法

  • +resolveInstanceMethod:
  • +resolveClassMethod:
    你可以在这里动态添加一个方法来解决,解决后,会重新走消息发送的流程,比如下面
+ (BOOL)resolveClassMethod:(SEL)sel
{
    if (sel == @selector(test)) {
        // 第一个参数是object_getClass(self)
        class_addMethod(object_getClass(self), sel, (IMP)c_other, "v16@0:8");
        return YES;
    }
    return [super resolveClassMethod:sel];
}

假设你不处理的话,那么就会进入到消息转发阶段

消息转发

消息转发只需要关注三个方法

  • (+ -)(id)forwardingTargetForSelector:
  • (+ -)(NSMethodSignature *)methodSignatureForSelector:
  • (+ -)(void)forwardInvocation:

forwardingTargetForSelector可以返回一个转发的其它对象,如果为nil,就会调用methodSignatureForSelector,这里可以返回一个方法签名,之后会封装成签名对象来调用forwardInvocation,具体流程图如下

消息转发流程图
扩展

NSMethodSignature的生成可以用以下代码

[NSMethodSignature signatureWithObjCTypes:"i@:i"];
[[[Person alloc] init] methodSignatureForSelector:@selector(run)];

相关文章

  • 02.消息机制

    之前内容:01Class的结构[https://www.jianshu.com/p/c3049e046f73] 消...

  • Runtime

    相关简单介绍 消息机制消息传递机制消息转发机制-动态添加方法消息转发机制-快速转发消息转发机制-慢速转发消息转发机...

  • 02.思考机制

    怎样能做到更好地思考呢?本次王烁课程中提及的三个思想实验:图灵测试、中文屋子以及亿年机器人对如何思考机制做...

  • <> Chapter 10

    Android的消息机制 Android消息机制概述 Android的消息机制主要是指Handler的运行机制以及...

  • iOS消息转发机制

    消息转发机制: 消息转发机制是相对于消息传递机制而言的。 1、消息(传递)机制 RunTime简称运行时。就是系统...

  • OC消息机制,消息转发机制

    Runtime简称运行时,其中最主要的是消息机制 概述 C 与 OC 的不同 1.C 语言,函数的调用在编译的时候...

  • Runtime 你为何如此之屌?

    一、消息驱动机制 消息驱动机制: 运行的时候的一些机制,最主要的是消息机制。 消息驱动机制-动态调用过程 : 对于...

  • 08.Objective-C 消息机制

    问题 消息机制的三个阶段 1.消息机制发送消息阶段-消息发送2.消息机制动态方法解析阶段 -动态解析3.消息机制消...

  • 关于runtime的一些简单理解

    1.消息发送OC:运行时机制,消息机制是运行时机制最重要的机制消息机制:任何方法调用,本质都是发送消息 SEL:方...

  • runtime系列文章总结

    《iOS Runtime详解(消息机制,类元对象,缓存机制,消息转发)》《消息转发机制与Aspects源码解析》《...

网友评论

      本文标题:02.消息机制

      本文链接:https://www.haomeiwen.com/subject/ictwwltx.html