iOS 消息机制详解

embedded/2024/10/22 11:05:33/

应用

解决NSTimer、CADisplayLink循环引用。
二者都是基于runloop的定时器,由于处理事件内容不一样,runloop 每运行一次运行耗时就不一样,无法准确的定时触发timer的事件。

NSProxy 与 NSObject

如果继承自NSProxy

直接开始消息转发,NSProxy 是没有父类的。
继承NSProxy的类,调用isKindOfClass,会返回true,消息转发会用 target 本身做判断
在这里插入图片描述

如果继承自NSObject

isa 查找

isa 在当前类的方法缓存、方法列表中,找不到方法实现时,如果存在继承,会借助superclass寻找父类的方法缓存、方法列表中,找方法实现。

动态解析阶段

在这里插入图片描述
本质是调用了 objc_msgSend()
如果 isa 找到最后,找到原类还是找不到方法实现,就进入动态解析阶段。
此时,系统会再次通过 isa ,从类对象或者原类对象依次查找以下两个方法的实现:

+ (BOOL)resolveInstanceMethod:(SEL)sel // 对应实例方法
+ (BOOL)resolveClassMethod:(SEL)sel // 对应类方法

对应 runtime 源码:
在这里插入图片描述
举例:
在这里插入图片描述
在这里插入图片描述

消息转发阶段

继承自 NSObject 的情况下,如果动态解析阶段依然找不到方法实现,则进入消息转发阶段。
将消息转发给能处理消息的对象或者类

  • 类方法
+ (id)forwardingTargetForSelector:(SEL)aSelector
+ (void)forwardInvocation:(NSInvocation *)anInvocation
  • 对象方法
- (id)forwardingTargetForSelector:(SEL)aSelector
- (void)forwardInvocation:(NSInvocation *)anInvocation

http://www.ppmy.cn/embedded/118192.html

相关文章

本地打开打包后的dist文件报错的解决方法

出现问题 本地直接打开dist文件夹会报错,报错信息类似于: Access to script at file:///D:/assets/index.9cb0ffcc.js from origin null has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: chrome, ch…

Google BigTable架构详解

文章目录 什么是BigTable?架构图一、整体架构二、数据存储与索引存储模型 三、数据拆分与存储四、元数据管理五、读写流程 其他内容概览负载平衡其他存储和数据库选项 什么是BigTable? Bigtable是Google开发的一个高性能、可扩展的分布式存储系统,用于管理大规模…

LiveQing视频点播流媒体RTMP推流服务功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大

LiveQing视频点播流媒体RTMP推流服务功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大 1、鉴权直播2、视频点播3、RTMP推流视频直播和点播流媒体服务 1、鉴权直播 鉴权直播-》播放 ,左键单击可以拉取矩形框,放大选中的范围&#x…

java intellij idea开发步骤,使用指南,工程创建与背景色字体配置,快捷键

intellij idea2021 配置背景色,字体大小,主题 快捷键

matlab中在一个图上持续画多条曲线的方法

在数据分析的过程中,会遇到一种情况,就是想对多组数据进行分析,这时就想把他们放在同一张图里,来看他们表现出来的特征。如下图所示: 例如,我这里有几组数据,想对他们的整体趋势进行分析。 1、…

如何准备秋招入行游戏开发?

如何准备秋招入行游戏开发? 秋招非常非常重要!绝不能轻易错过!!! 早起的鸟儿有虫吃, 这句话对于企业和应届生双方而言都是适用的。 对于有校招需求的企业而言, 秋招是一年中规模最大的招聘项目之一, …

Python爬虫lxml模块安装导入和xpath基本语法

lxml模块是Python的一个解析库,主要用于解析HTML和XML文件。 一、安装导入 使用包管理器安装,在cmd下或编辑器下的控制台,运行: pip install lxml 导入: from lxml import etree 二、xpath基础知识 XPath&#…

arm-硬件

一、ARM体系与架构 ARM芯片组成 -- arm 体系中,一般讲到的芯片由两大部分组成:arm的内核、外设 arm内核: -- 其内核主要由:寄存器、指令集、总线、存储器映射规则、中断逻辑主调试组件构成。ARM公司只设计内核,授权给…