美文网首页
OC的消息机制

OC的消息机制

作者: hyq1101 | 来源:发表于2021-02-08 16:37 被阅读0次

OC中的方法调用其实都是转成了objc_msgSend函数的调用,给receiver(方法调用者)发送了一条消息
objc_msgSend底层有3大阶段:消息发送阶段、动态方法解析阶段、消息转发阶段


isa、superclass指针.jpg

1、消息发送阶段
首先会判断消息接收者是否为空,如果为空,直接返回,如果不为空
通过isa指针找到类对象,从类对象的cache中查找,找到直接调用,找不到就从方法列表class_rw_t里面查找,找到直接调用并缓存到cache中,找不到就通过superclass指针找到父类的类对象,从父类类对象的cache中查找,找到直接调用并缓存到receiverClass的cache中,找不到就从父类类对象的方法列表class_rw_t里面查找,找到直接调用并缓存到receiverClass的cache中,找不到就继续通过superclass指针往上找,直到基类都找不到的话就进入动态方法解析阶段

2、动态方法解析阶段
首先会判断是否已进行过动态方法解析
否:会调用resolveInstanceMethod:方法来动态解析方法,并且标记为已经动态解析
是:进入消息转发阶段

3、消息转发阶段
调用forwardingTargetForSelector:方法看返回值是否为nil
否:objc_msgSend(返回值,SEL)
是:调用methodSignatureForSelector:方法进行方法签名
看返回值是否为nil
否:调用forwardInvocation:方法
是:调用doesNotRecognizeSelector:方法
objc_msgSend如果找不到合适的方法进行调用,会报错 unrecognized selector sent to instance

相关文章

  • iOS runtime

    runtime 是 oc 语音的基础首先runtime的核心机制是消息机制 也就是oc的消息机制首先oc的消息机制...

  • OC中的消息机制和动态运行时

    消息机制:OC中的实例对象调用一个方法称作消息传递 OC中里的消息传递采用动态绑定机制来决定具体调用哪个方法,OC...

  • 关于Runtime 消息发送机制的延伸

    说到OC 不得不说一下OC 的消息转发机制;何为OC 的消息转发机制;其实就是这样的; Objc 在向一个对象发送...

  • OC消息机制

    基于Runtime的动态特性 在苹果的官方文档中,对Runtime的介绍如下: The Objective-C l...

  • oc消息机制

    内存分区 1栈 局部变量 2堆alloc分配地址 在方法中(函数体)定义的变量通常是在栈内,因此如果你的变量要跨函...

  • OC消息机制

    1.消息机制RunTime简称运行时。就是系统在运行的时候的一些机制,其中最主要的是消息机制。对于C语言,函数的调...

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

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

  • Runtime部分

    --------------------Runtime-------------------- OC的消息机制 O...

  • oc的消息机制

    import "ViewController.h" import "Person.h" // 导入框架 第一步 i...

  • OC的消息机制

    1.OC中的方法调用在底层都是转成了objc_msgSend函数的调用,给receiver(方法调用者)发送一条消...

网友评论

      本文标题:OC的消息机制

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