iOS消息发送流程

向对象发送消息,核心就是找到对应的方法,然后传入参数执行。
其具体过程是:
- 确定class已经加载
- 从cache中通过hash查找方法
- 从类的方法列表中查找
- 从父类中查找
- 若方法列表是排序过的, 则采用二分法查找;若方法列表未排序,则采用遍历查找。
- 若找到方法,执行之;否则,进入消息转发流程。
需要注意的是, 向super对象发送消息,调用的不是objc_msgSend方法。
NSLog(@"NSStringFromClass([self class])=%@",NSStringFromClass([self class]));
NSLog(@"NSStringFromClass([super class])=%@",NSStringFromClass([super class]));打印结果:
NSStringFromClass([self class])=BankViewController
NSStringFromClass([super class])=BankViewController
为什么 [super class]返回的也是BankViewController呢? 这是因为, super结构体中的receiver指针其实指向的也是self,只是向super发送消息调用的是objc_msgSendSuper方法,该方法在执行消息传递时,会调用查找自己类中的方法,直接从父类开始查找。
相关文章:
iOS消息发送流程
Objc的方法调用基于消息发送机制。即Objc中的方法调用,在底层实际都是通过调用objc_msgSend方法向对象消息发送消息来实现的。在iOS中, 实例对象的方法主要存储在类的方法列表中,类方法则是主要存储在原类中。 向对象发送消息,核心…...
【接口测试】常见HTTP面试题
目录 HTTP GET 和 POST 的区别 GET 和 POST 方法都是安全和幂等的吗 接口幂等实现方式 说说 post 请求的几种参数格式是什么样的? HTTP特性 HTTP(1.1) 的优点有哪些? HTTP(1.1) 的缺点有哪些&#x…...
服务器硬件基础知识
1. 服务器分类 服务器分类 服务器的分类没有一个统一的标准。 从多个多个维度来看服务器的分类可以加深我们对各种服务器的认识。 N.B. CISC: complex instruction set computing 复杂指令集计算 RISC: reduced instruction set computer 精简指令集计算 EPIC: explicitly p…...
matlab实现层次聚类与k-均值聚类算法
1. 原理 1.层次聚类:通过计算两类数据点间的相似性,对所有数据点中最为相似的两个数据点进行组合,并反复迭代这一过程并生成聚类树 2.k-means聚类:在数据集中根据一定策略选择K个点作为每个簇的初始中心,然后将数据划…...
【机器学习】包裹式特征选择之递归特征消除法
🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…...
【ArcGIS】重采样栅格像元匹配问题:不同空间分辨率栅格数据统一
重采样栅格像元匹配问题:不同空间分辨率栅格数据统一 原始数据数据1:GDP分布数据2.1:人口密度数据2.2:人口总数数据3:土地利用类型 数据处理操作1:将人口密度数据投影至GDP数据(栅格数据的投影变…...
Qt 简约又简单的加载动画 第七季 音量柱风格
今天和大家分享两个音量柱风格的加载动画,这次的加载动画的最大特点就是简单,只有几行代码. 效果如下: 一共三个文件,可以直接编译运行 //main.cpp #include "LoadingAnimWidget.h" #include <QApplication> #include <QGridLayout> int main(int argc…...
【JS】数值精度缺失问题解决方案
方法一: 保留字符串类型,传给后端 方法二: 如果涉及到计算,用以下方法 // 核心思想 在计算前,将数字乘以相同倍数,让他没有小数位,然后再进行计算,然后再除以相同的倍数࿰…...
c++基础知识补充4
单独使用词汇 using std::cout; 隐式类型转换型初始化:如A a1,,此时可以形象地理解为int i1;double ji;,此时1可以认为创建了一个值为1的临时对象,然后对目标对象进行赋值,当对象为多参数时,使用(1…...
leetcode230. 二叉搜索树中第K小的元素
lletcode 230. 二叉搜索树中第K小的元素,链接:https://leetcode.cn/problems/kth-smallest-element-in-a-bst 题目描述 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 …...
医学大数据|文献阅读|有关“肠癌+机器学习”的研究记录
目录 1.机器学习算法识别结直肠癌中的免疫相关lncRNA signature 2.基于机器学习的糖酵解相关分子分类揭示了结直肠癌癌症患者预后、TME和免疫疗法的差异,2区7 3.整合深度学习-病理组学、放射组学和免疫评分预测结直肠癌肺转移患者术后结局 4.最新7.4分纯生信&am…...
Linux信号【systemV】
目录 前言 正文: 1消息队列 1.1什么是消息队列? 1.2消息队列的数据结构 1.3消息队列的相关接口 1.3.1创建 1.3.2释放 1.3.3发送 1.3.4接收 1.4消息队列补充 2.信号量 2.1什么是信号量 2.2互斥相关概念 2.3信号量的数据结构 2.4…...
node.js最准确历史版本下载
先进入官网:Node.js https://nodejs.org/en 嫌其他博客多可以到/release下载:Node.js,在blog后面加/release https://nodejs.org/en/blog/release/ 点击next翻页,同样的道理...
UE5 C++ 单播 多播代理 动态多播代理
一. 代理机制,代理也叫做委托,其作用就是提供一种消息机制。 发送方 ,接收方 分别叫做 触发点和执行点。就是软件中的观察者模式的原理。 创建一个C Actor作为练习 二.单播代理 创建一个C Actor MyDeligateActor作为练习 在MyDeligateAc…...
前端学习、CSS
CSS可以嵌入到HTML中使用。 每个CSS语法包含两部分,选择器和应用的属性。 div用来声明针对页面上的哪些元素生效。 具体设置的属性以键值对形式表示,属性都在{}里,属性之间用;分割,键和值之间用:分割。 因为CSS的特殊命名风格…...
Flink基本原理 + WebUI说明 + 常见问题分析
Flink 概述 Flink 是一个用于进行大规模数据处理的开源框架,它提供了一个流式的数据处理 API,支持多种编程语言和运行时环境。Flink 的核心优点包括: 低延迟:Flink 可以在毫秒级的时间内处理数据,提供了低延迟的数据…...
3. 文档概述(Documentation Overview)
3. 文档概述(Documentation Overview) 本章节简要介绍一下Spring Boot参考文档。它包含本文档其它部分的链接。 本文档的最新版本可在 docs.spring.io/spring-boot/docs/current/reference/ 上获取。 3.1 第一步(First Steps) …...
【vue3 路由使用与讲解】vue-router : 简洁直观的全面介绍
# 核心内容介绍 路由跳转有两种方式: 声明式导航:<router-link :to"...">编程式导航:router.push(...) 或 router.replace(...) ;两者的规则完全一致。 push(to: RouteLocationRaw): Promise<NavigationFailur…...
ubuntu创建账号和samba共享目录
新建用于登录Ubuntu图形界面的用户 sudo su #切换为root用户获取管理员权限用于新建用户 adduser username #新建用户(例如用户名为username) adduser username sudo #将用户添加到 sudo 组 新建只能用于命令行下登录的用户 sudo su #切换为root用户…...
李沐动手学习深度学习——3.6练习
本节直接实现了基于数学定义softmax运算的softmax函数。这可能会导致什么问题?提示:尝试计算exp(50)的大小。 可能存在超过计算机最大64位的存储,导致精度溢出,影响最终计算结果。 本节中的函数cross_entropy是根据交叉熵损失函数…...
别再手动轮询了!用FreeRTOS二值信号量搞定STM32串口DMA接收(附完整工程)
彻底告别轮询!FreeRTOS二值信号量在STM32串口DMA接收中的实战指南 嵌入式开发中,串口通信是最基础却又最让人头疼的环节之一。想象一下这样的场景:你的户外GPS设备正在通过串口接收定位数据,这些数据包长度不定、间隔随机…...
从SQL注入到Linux提权:DC-3靶场渗透实战中的5个关键转折点解析
从SQL注入到Linux提权:DC-3靶场渗透实战中的5个关键转折点解析 在网络安全实训中,靶场渗透测试不仅是技术操作的演练场,更是决策思维的训练营。DC-3作为经典的Joomla CMS渗透靶机,其价值不仅在于最终获取flag的结果,更…...
2026奇点智能技术大会核心技术解密(AI原生研发全链路SOP首次公开)
第一章:2026奇点智能技术大会:AI原生研发全流程拆解 2026奇点智能技术大会(https://ml-summit.org) 在2026奇点智能技术大会上,AI原生研发不再停留于模型微调与API调用,而是贯穿从需求建模、数据契约定义、可验证推理生成&#x…...
Ryzen处理器终极调优指南:3步解锁AMD CPU隐藏性能
Ryzen处理器终极调优指南:3步解锁AMD CPU隐藏性能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcod…...
VibeVoice语音助手搭建教程:支持10分钟长文本,会议纪要秒变语音
VibeVoice语音助手搭建教程:支持10分钟长文本,会议纪要秒变语音 你有没有过这样的经历?深夜加班整理完一份长达十几页的会议纪要,领导突然发来消息:“小王,把会议重点录个语音版,明早发给团队。…...
WorkshopDL终极指南:如何免费下载1000+款Steam创意工坊模组
WorkshopDL终极指南:如何免费下载1000款Steam创意工坊模组 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 还在为GOG或Epic平台游戏无法使用Steam创意工坊模组而烦恼…...
Phi-4-mini-reasoning 3.8B集成MySQL实战:智能数据查询与报告生成
Phi-4-mini-reasoning 3.8B集成MySQL实战:智能数据查询与报告生成 1. 引言:当AI遇到数据库 想象一下这样的场景:作为电商平台的数据分析师,你每天需要处理大量用户订单数据。老板突然问:"上个月华东地区25-35岁…...
VNC远程连接树莓派的方法
VNC远程连接树莓派的核心方法是:树莓派上启用VNC服务,电脑上安装客户端软件,通过局域网IP地址从电脑连接。以下是具体操作步骤: 1. 在树莓派上启用VNC服务 图形界面设置(适用于有显示器操作) 点击树…...
告别随机抽卡:Stable Diffusion v1.5 参数复现机制详解与实操
告别随机抽卡:Stable Diffusion v1.5 参数复现机制详解与实操 你是不是也玩过“AI抽卡”?输入一段描述,点击生成,然后祈祷能出一张好图。运气好时,画面惊艳;运气不好,就得一遍遍重试࿰…...
MARY TTS信号处理核心技术:正弦分析与HNM算法的深度剖析
MARY TTS信号处理核心技术:正弦分析与HNM算法的深度剖析 【免费下载链接】marytts MARY TTS -- an open-source, multilingual text-to-speech synthesis system written in pure java 项目地址: https://gitcode.com/gh_mirrors/ma/marytts MARY TTS作为一款…...
