美文网首页
iOS 消息机制

iOS 消息机制

作者: 黑色茄子 | 来源:发表于2020-07-29 14:36 被阅读0次

OC的消息机制,会经常在面试中被问到,所以这里记录一下,

消息发送

首先会判断receiver 是否为nil,假如为nil,那么就什么也不做,假如不为nil,那么就会去receiverClass的方法缓存里面查找方法,假如找到了就会调用方法,假如找不到,就会去receiverClass的方法列表中查找方法,假如也找不到,就去superClass的方法缓存中查找,也没找到,就会去superClass的方法列表里面找,直到一直找到了基类也没有找到,那么它就会开始动态方法解析,假如中间哪一步找到了方法,那么就会调用方法,结束查找,并把方法缓存到receiverClass的方法缓存中去


未命名文件2.png
动态解析

首先会判断是否动态解析过,假如已经动态解析过了,那么就会进入消息转发阶段,假如没有,那么就会调用+resolveInstanceMethod:或者 +resolveClassMethod:方法,开发者可以实现这两个方法来达到动态添加方法实现的目的,调用完方法之后,会标记为已经动态解析过了,并会重新走“消息发送”流程,从receiverClass的缓存中查找方法这一步开始执行。


未命名文件3.jpg
消息转发

首先会调用forwardingTargetForSelector:方法,假如不为nil, 那么就会拿到返回值,调用objc_msgSend(返回值,SEL),假如返回值为nil,那么就会调用methodSignatureForSelector:,假如methodSignatureForSelector:返回值不为nil,就会调用forwardInvocation:方法,开发者可以在这个方法中自定义任何逻辑,假如返回值为nil,那就会调用doesNotRecognizeSelector:方法,
forwardingTargetForSelector:与methodSignatureForSelector:有对象方法和类方法两个版本,可根据开发需要,自行选择。


未命名文件4.jpg

相关文章

  • runtime系列文章总结

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

  • iOS理解Objective-C中消息转发机制附Demo

    iOS理解Objective-C中消息转发机制附Demo iOS理解Objective-C中消息转发机制附Demo

  • iOS面试-基础

    [toc] Runloop AutoReleasePool 多线程 响应者链 消息响应机制 消息转发机制 iOS内...

  • iOS消息机制

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

  • iOS 消息机制

    OC的消息机制,会经常在面试中被问到,所以这里记录一下, 消息发送 首先会判断receiver 是否为nil,假如...

  • iOS 消息机制

    OC 是一门复杂的高级语言,正是因为巧妙复杂的结构设计和内存模型,巧妙的运用isa和superClass[http...

  • 深入了解runtime

    iOS经典讲解之[self class]和[super class]的区别 iOS的消息机制和消息转发 Objec...

  • iOS 消息转发机制

    今天大概学习了下iOS的消息转发机制,还是挺有收获,在此做下笔记,以便后面温习。 1.iOS的消息转发机制原理如下...

  • iOS面试题总结(二)

    iOS面试题(二) 消息发送和转发机制,SEL和IMP 消息发送转载自黄龙辉消息发送和消息转发机制 在Object...

  • IOS消息传递机制

    ios的消息传递机制分为三个阶段:消息发送阶段,动态解析阶段,消息转发阶段。 消息发送阶段: 当ios的对象调用方...

网友评论

      本文标题:iOS 消息机制

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