message.h

2023-11-09

message.h

概述

objc_super

/// Specifies the superclass of an instance. 
struct objc_super {
    /// Specifies an instance of a class.
    __unsafe_unretained _Nonnull id receiver;

    /// Specifies the particular superclass of the instance to message. 
#if !defined(__cplusplus)  &&  !__OBJC2__
    /* For compatibility with old objc-runtime.h header */
    __unsafe_unretained _Nonnull Class class;
#else
    __unsafe_unretained _Nonnull Class super_class;
#endif
    /* super_class is the first class to search */
};
#endif

这里定义了一个结构体objc_super。

这个结构体里有两个实例对象,一个是id类型的receiver,一个是Class(Class的定义是在objc.h中,Class是objc_class类型的结构体,objc_class在runtime.h中)类型的super_class。

receiver其实就是self,根据注释是指定了类的实例,即自己。

super_class即父类,指定了类的父类。

这个结构体的作用是什么呢?大概猜测一下,既然放在message.h里面,应该和消息转发有关。消息转发的时候指定谁去转发消息,首先是receiver,也即时self,然后是super_class,消息也传递到了指定的父类那里。

objc_msgSend、objc_msgSendSuper

这个类里面定义了一些objc_msgSend()函数,还有objc_msgSendSuper()。

objc_msgSend这个比较常见

((void (*)(id, SEL))objc_msgSend)(p, @selector(run));

这以下的函数我们并不常见,暂时不清除他们的作用,但是查查资料可以学习学习,既然和objc_msgSend都定义在message.h中,那可能也是做消息转发用的,objc_msgSend可以发送消息,下面这些方法当然也是用来发送消息的,只是在特定的其情况下runtime使用下面一些函数进行消息转发。

正常情况下,runtime会使用函数objc_msgSend()去转发消息。当本实例没找到对应的方法时,会去父类找,如果找到了就使用objc_msgSendSuper()去转发消息,如果还是未找到方法,会使用下面的一下函数进行消息转发。


objc_msgSend_stret、objc_msgSendSuper_stret

看这个函数的文档注释,感觉不像是抛出异常才会被使用。

它应该和objc_msgSend这个是“同一级”的函数。

stret是个什么?

看了看网上有人说stret就是struct return的缩写,

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

message.h 的相关文章

  • 是否可以在 C++ 运行时动态创建函数?

    C 是一种静态的编译语言 模板在编译时解析等等 但是是否有可能在运行时创建一个函数 该函数未在源代码中描述 并且在编译期间未转换为机器语言 以便用户可以向其抛出源代码中未预期的数据 我知道这不可能以直接的方式发生 但肯定是可能的 有很多编程
  • 混合运行时是可行的解决方案吗?

    在我的公司 我们最近从 VC9 切换到 VC10 我们迁移了我们的项目 但是负责人告诉我们 我们必须在我们的生产机器上保留一些用 VC9 编译的基本通用 DLL 一段时间 这些 DLL 使用自定义结构 其中一些包含std vector st
  • 我什么时候需要下载.Net core运行时?

    From this https dotnet microsoft com download sdk链接 我们可以下载Core SDK和Runtime 据我了解 SDK 包含运行时 但在什么情况下我应该下载 Net Core Runtime
  • 是否可以在 Action Script 3 中动态创建用户定义类的实例?

    我有一个工厂 其中 Action Script 遵循 xml 并从中构建 DisplayObject 层次结构 这意味着脚本事先并不知道它将在 xml 中遇到哪些元素 因此也不知道它将需要哪些用户定义的工厂类 我知道可以做这样的事情 var
  • Ocaml - 多态打印和类型丢失

    OCaml中有print int print endline Printf等一系列函数 我不能做这样的事情 let n 10 in print n And I haven t to change print in case type of
  • PyCharm:如何推断运行时创建的对象的类型

    我正在尝试使用一个创建对象的库 并在运行时将它们添加到全局命名空间 PyCharm 无法找到对对象的引用 因为它们最初不在命名空间中 如何让 PyC harm 内省不抱怨 找不到参考 我不想用noinspection tags 示例代码 为
  • 从java程序运行jar文件

    我正在尝试从另一个 Java 程序执行 jar 文件 我正在使用以下代码 try Runtime runtime Runtime getRuntime runtime exec path upto jar catch Exception e
  • 递推的复杂度 T(n)=T(n/2T(n/2)+n^2?

    根据主定理 这个递归是 n 2 但是如果我们用树递归来解决这个问题 那么解就是 n 2 logn 难道我做错了什么 如果递推关系为 T n 2T n 2 n 2 那么您处于主定理的第三种情况 并且正则性条件适用 因此 T n Theta n
  • Java Process无法通过Runtime.getRunTime().exec()获取InputStream

    try String str Process process Runtime getRuntime exec bash home abhishek workspace Pro run InputStream isout process ge
  • 将大文件作为流发送到 process.getOutputStream

    我在 Windows 机器中使用 gzip 实用程序 我压缩了一个文件并作为 blob 存储在数据库中 当我想使用 gzip 实用程序解压缩此文件时 我将此字节流写入 process getOutputStream 但超过30KB后 就无法
  • chrome 扩展 - 我如何等待 chrome.runtime 函数?

    我在后台的操作是访问该站点并从那里获取信息 问题是代码在收到信息之前继续运行 附上显示问题的代码 背景 js chrome runtime onMessage addListener function request sender send
  • C、运行时测试 PATH 中是否存在可执行文件

    我目前正在用 C 语言编写一个应用程序 目标是 BSD 和 Linux 系统 希望能够普遍移植 该程序具有运行时依赖项 在本例中为 mplayer 就目前情况而言 我正在使用execlp 启动 mplayer 我正在检查 execlp 调用
  • 调试时静态变量初始值设定项的运行时评估中的奇怪现象

    当我从 Visual Studio 内部启动并附加调试器 F5 时 我的应用程序运行良好 但是当我启动应用程序而不附加调试器 Ctrl F5 或启动 exe 文件 时 我总是得到一个StackOverflowException幸运的是 它被
  • 如何禁用java中的运行时警告?

    我在 java 程序中使用 jar 文件 它在运行时生成警告 但我不希望我的客户看到这些警告 我怎样才能禁用这些警告 警告如下 Sep 25 2009 10 10 33 PM com gargoylesoftware htmlunit In
  • 什么时候插入排序比合并排序快?

    对于家庭作业问题 我被告知插入排序以 8n 2 运行 合并排序以 64 n lg n 运行 作为我得到的解决方案的一部分 它说只要 n 它来自这个 代数 推理路线 steps in insertion sort lt steps in me
  • 如何在运行时检测某些编译器选项(如断言)是否设置为 ON?

    Delphi 中检查断言是否有效的条件是什么 当断言在代码中不活动时 我希望能够做一些事情来抑制有关未使用变量的提示 例如 procedure Whatever var v Integer begin v DoSomething Asser
  • MySQL Workbench 连接到 AWS 上的 RDS 数据库实例时执行的任何操作都会出现极大延迟

    首先 我完全意识到 Stack Overflow 本身可能不是一个理想的子论坛来问这个问题 但我问了我的教授 他告诉我去问 Bing AI 而 Bing AI 告诉我在这里问这个问题 所以如果还有其他一些特定的子论坛会更好 请在评论或答案中
  • 发送 cmdarray 供 exec 处理——hello world

    我不是发送一系列命令 hello world 到exec https docs oracle com javase 7 docs api java lang Runtime html exec 28java lang String 5B 5
  • 如何列出运行时函数的所有调用?

    有什么办法可以list 在VS中显示 写入文件 所有来电者 对象 函数 一个函数的当程序运行时 可能使用调试器 我需要record 所有通话 包括来电者 一个函数的从计划启动到终止 简单扫描源代码或二进制文件不做这份工作因为该程序可以作为服
  • 应用程序启动时立即隐藏导航栏

    基于以下代码片段 我能够隐藏状态栏当应用程序启动时 但不是导航栏 由后退 主页和任务管理器按钮组成的栏 因为它隐藏了稍后在 MainActivity 的线程完成加载后 这是清单

随机推荐

  • 在cmd中,如何使用cd进入指定文件目录

    1 要进入的磁盘与当前磁盘一致 例如 cd C Program Files x86 Google Chrome Application 2 进入到其他磁盘 例如 cd d D JAVA codes 01 1 4 或者下面的方式 直接输入磁盘
  • Unity中Cg的基本语法和使用

    Cg是类似于C语言的发展起来的图形编程语言 Cgraphics 它的很多表达式if else 和C语言非常相像 也和C 非常相像 由于Shader是写给显卡执行的 所以没有输出语句来调试 很多地方调试不了 只能靠Unity编辑器来帮我们报错
  • valgrind和Kcachegrind性能分析工具详解

    作者 zhuyong 原文地址 一 valgrind介绍 valgrind是运行在Linux上的一套基于仿真技术的程序调试和分析工具 用于构建动态分析工具的装备性框架 它包括一个工具集 每个工具执行某种类型的调试 分析或类似的任务 以帮助完
  • web安全常用网络扫描端口漏洞利用

    端口 服务 入侵方式 21 ftp tftp vsftpd文件传输协议 爆破 嗅探 溢出 后门 22 ssh远程连接 爆破 openssh漏洞 23 Telnet远程连接 爆破 嗅探 弱口令 25 SMTP邮件服务 邮件伪造 53 DNS域
  • 如何快速搭建个人网站(服务器配置篇)

    关于服务器的购买和域名注册可以参考我的这篇博客 在使用之前 建议小白用户先下载一个Vmware 安装一个Ubuntu的虚拟环境学习一下linux的基础命令 一 远程服务器的连接 服务器购买好了以后我们需要进行远程连接我们的服务器 我个人推荐
  • Qt样式表总结

    概念 Qt的样式表主要是受到CSS的启发 通过调用setStyleSheet 可以为一个独立的子部件 整个窗口 甚至整个应用程序制定一个样式表 样式表具有继承关系 例如为一个QWidget类设置了样式表 那么QWidget类及其子类都会使用
  • C 语言 打印 int32_t int64_t 类型

    printf x PRId32 x PRId32 PRId64 是宏
  • SpringBoot 报错: Error creating bean with name ‘deptServiceImpl‘: Unsatisfied dependency expressed th

    报错 原因从网上可以得知 检查自己的Mapper文件有没有加入注解 Mapper Repository 和自己的deptServiceImpl 加入 Service 中引入的Mapper有没有用 Autowired 如图 如果上述都有 我们
  • Excel截取字符串:从指定第N个分隔符处截取

    目的 如下图 截取下面字符串中最后一个 后面的部分字符串 思路 1 利用SUBSTITUTE A2 将分隔符替换成空字符 如下图 2 利用LEN A2 LEN SUBSTITUTE A2 即可获取里面被替换掉了多少个分隔符 3 由于SUBS
  • 京东云无线宝可以服务器吗,京东云无线宝哪种上网方式收益最高,这点你一定得知道...

    京东云无线宝路由作为一款可以赚积分的路由器 备受关注 怎么能获取更高的积分 是大家一直都非常关心的 今天我们就来聊一聊 京东云无线宝路由采用哪种上网方式 收益最高 在京东云无线宝的后台 我们可以看到路由器一共提供了4种上网方式 分别为 拨号
  • Redfish介绍和Postman工具使用

    Redfish Redfish的诞生是为了替代IPMI 由于IPMI自身的局限性和安全性缺陷 IPMI 在2015年公布2 0 v1 1标准后 不再更新 被RedFish永久代替 Redfish 可扩展平台管理 API The Redfis
  • DQN Pytorch示例

    智能体是一个字母o 它卡在许多 之间 而要达到的目的是并确保o两侧都有 这需要让o能够向左右两边移动 而且速度略快于无动作时的自然移动速度 看起来就像下面那样 这是一种很简单的情形 pytorch版本 1 11 0 cu113 代码 因为每
  • gDDIM: Generalized denoising diffusion implicit models

    gDDIM Generalized denoising diffusion implicit models 论文链接 2206 05564 gDDIM Generalized denoising diffusion implicit mod
  • 【实践3】Python pandas读取Excel指定单元格 / 在指定单元格插入数据,不改变Excel格式

    简单介绍 有时会遇到只需将爬取的数据填入指定的单元格 而不需要更改Excel格式的情况 或是将一个Excel指定单元格内容复制后插入另一个Excel的单元格 完整代码 import pandas as pd from openpyxl im
  • Cmake常用命令(二)

    本文主要介绍File关键字 它是文件系统相关的操作的入口 读文件 命令 格式 解释 示例 READ file READ
  • 初探支付对账

    大家好 我是老三 好久不见 最近比较忙碌 状态也不是太好 很久没有输出 最近在做对账系统的调研和设计 给大家分享一些对账系统的知识 什么是对账 有个男人叫小帅 娶了个老婆 叫小美 早上 小美给小帅二十块钱买早餐 小帅买了包子 油条 豆浆回来
  • Golang jwt跨域鉴权

    Golang jwt跨域鉴权 JWT全称JSON Web Token是一种跨域认证解决方案 属于一个开放的标准 它规定了一种Token实现方式 目前多用于前后端分离项目和OAuth2 0 安装jwt go get github com dg
  • java中集合框架汇总

    Java 集合框架主要包括两种类型的容器 一种是集合 Collection 存储一个元素集合 另一种是图 Map 存储键 值对映射 Collection 接口又有 3 种子类型 List Set 和 Queue 再下面是一些抽象类 最后是具
  • 【Shell编程】字符截取命令cut、printf命令

    目录 cut命令 功能 语法 参数 实例 测试文本 提取所有行的姓名 提取所有行的姓名和评分 分割文本 提取 etc passwd中用户的用户名 cut命令的局限 printf命令 功能 语法 参数 输出类型 输出格式 实例 以字符串格式输
  • message.h

    文章目录 message h 概述 objc super objc msgSend objc msgSendSuper objc msgSend stret objc msgSendSuper stret objc msgSend fpre