Foundation 可以告诉我 Objective-C 方法是否需要特殊的结构返回吗?

2023-12-28

据我了解,背景:Objective-C 方法调用基本上是带有两个隐藏参数(接收器和选择器)的 C 函数调用。 Objective-C 运行时包含一个名为 objc_msgSend() 的函数,允许以这种方式调用方法。不幸的是,当函数返回结构时,可能需要进行一些特殊处理。有一些神秘的(有些人可能会说疯狂的)规则来控制结构是否像其他值一样返回,或者是否实际上通过隐藏的第一个参数中的引用返回。对于 Objective-C,在这些情况下必须使用另一个名为 objc_msgSend_stret() 的函数。

问题:给定一个方法, NSMethodSignature 或其他东西可以告诉我是否必须使用 objc_msgSend() 或 objc_msgSend_stret() ?到目前为止,我们发现 NSMethodSignature 知道这一点,它在调试输出中打印它,但似乎没有公共 API。

如果您想回答“您到底为什么要这样做?!”,请在这样做之前阅读以下内容:https://github.com/erikdoe/ocmock/pull/41 https://github.com/erikdoe/ocmock/pull/41


Objective-C 在给定架构上使用与 C 相同的底层 ABI,因为方法只是带有隐式的 C 函数self and _cmd论据。

换句话说,如果你有一个方法:

- (SomeStructType)myMeth:(SomeArgType)arg;

那么这实际上是一个普通的 C 函数:

SomeStructType myMeth(id self, SEL _cmd, SomeArgType arg);

我很确定您已经知道这一点,但我只是向其他读者提及。 换句话说,您想询问 libffi 或任何类似的库如何SomeStructType将返回该架构。

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

Foundation 可以告诉我 Objective-C 方法是否需要特殊的结构返回吗? 的相关文章

  • cellForRowAtIndexPath 中的框架没有变化

    我想改变x位置框架view细胞内的cellForRowAtIndexPath对于某些条件 我使用了以下代码 但并不改变看法x position frame void viewDidLoad super viewDidLoad UINib n
  • UITableViewCell 上的自动布局问题

    我在使用自动布局时遇到问题xcode 5项目 我在内部使用带有导航控制器的普通视图控制器 我有一个MKMapView在上半部分和一个UITableView在下半部分 我在用storyboards 并配置了原型UITableViewCell
  • 更改 UIImageView 的位置

    我怎样才能为 UIImageView 做一个简单的位置改变 假设当前坐标是 x 20 和 y 30 我想将其移至 x 100 和 y 100 可以制作运动动画吗 你需要改变它的CGFrameUIImageView就像这样 imageView
  • 将 NSString 分离成 N​​SArray,但允许用引号对单词进行分组

    我有一个搜索字符串 人们可以使用引号将短语组合在一起 并将其与单个关键字混合 例如 像这样的字符串 Something amazing rooster 我想把它分成一个 NSArray 这样它就有Something amazing 不带引号
  • 错误域=NSURLErrorDomain代码=-1017“该操作无法

    我刚刚开始 ios 开发 我正在尝试与我的 api 交换数据 当我执行 POST 请求时 一切正常 但当我尝试执行 GET 请求时 出现以下错误 错误域 NSURLErrorDomain代码 1017 该操作无法 完全的 NSURLErro
  • 在横向模式下向 UIScrollView 添加子视图

    我有一个以横向模式启动的视图控制器 其中有一个 UIScrollView 我尝试创建子视图并将它们添加到 UIScrollView 但视图的框架大小都是纵向大小 这是我的代码 void viewDidLoad super viewDidLo
  • 如何使用 WKWebView 正确实施身份验证质询?

    我正在构建一个网络浏览器 但在网络方面我真的是新手 我想测试下面的代码示例 但我没有现实生活中的示例可以使用 void webView WKWebView webView didReceiveAuthenticationChallenge
  • UITableViewCell 的 viewDidAppear

    我通常使用viewDidAppear方法在视图完成出现后在视图上执行一些 UI 操作 我在各种情况下使用了此方法 它非常有用 但是 我需要在视图上进行一些 UI 更改UITableViewCell当它完成出现后 SDK中是否有任何可用的方法
  • iPad 2 检测

    由于我没有 iPad 2 因此我需要知道调用 UIDevice currentDevice model 时它返回什么 我以为它只返回 iPad 但看来我错了 有人可以告诉我吗 Thanks 检查是否有带摄像头的 iPad BOOL isIP
  • 如何在 UITableView 中显示零行的表格

    我正在动态地将内容加载到 UITableView 中 如果有数据 表格需要显示数据 如果没有数据 表格应显示普通页面 但在我的应用程序中 表格显示带有两条分隔线的普通页面 我需要删除此分隔线并显示纯白色页面 请建议 任何帮助 将不胜感激 如
  • 如何检测 UISwipeGestureRecognizer 的结束?

    来自苹果文档 滑动是一种离散手势 因此每个手势仅发送一次关联的操作消息 void touchesEnded NSSet touches withEvent UIEvent event 当我使用 UISwipeGestureRecognize
  • NSString stringWithContentsOfFile 失败,错误代码似乎错误

    我正在尝试将文件加载到字符串中 这是我正在使用的代码 NSError error nil NSString fullPath NSBundle mainBundle pathForResource filename ofType html
  • 如何在iOS中处理1到3个手指的滑动手势

    我使用以下代码来处理代码中的 1 根手指滑动 UISwipeGestureRecognizer swipe UISwipeGestureRecognizer alloc initWithTarget self action selector
  • 为什么在 init 方法中使用双括号,或者是 1 == (1)?

    评估某些含义时括号有什么作用 我在代码中遇到过这个问题 当检查某些内容并且他们使用 if some condition that returns 1 code 所以我的问题是 这是否正确 我认为它总是错误的 因为 1 不返回任何东西 编辑
  • locationOfTouch 和 numberOfTouches

    你好 我有这个识别器 设置为 2 次触摸 但它只返回一个 而不是两个 CGPoint void gestureLoad UIGestureRecognizer recognizer recognizer UITapGestureRecogn
  • Cocoa 应用程序菜单栏不可点击

    我正在我的可可应用程序中构建一个菜单栏 其中包含以下代码 implementation我的自定义应用程序CustomApplication void setUpMenuBar CustomApplication sharedApplicat
  • UIView animateWithDuration:delay: 工作很奇怪

    我在使用 iPhone 动画块时遇到了一个奇怪的问题 这段代码 UIView animateWithDuration 2 delay 0 options 0 animations void controller setBackgroundC
  • UIPickerView selectRow 未按预期工作

    我创建了一个UIPickerView它有两个组件 第一个组件 A 的行数固定为 13 另一个组件 B 的行数可变 具体取决于 A 中选择的行 加载时UIPickerView我调用以下命令 以便我可以在两个组件中默认选择 但是我遇到的问题是只
  • iPhone:UIApplication WillResignActiveNotification 从未被调用

    我正在视图控制器中播放视频 当用户按下硬件主页按钮并且当前正在播放视频时 应用程序崩溃并显示EXC BAD ACCESS在模拟器中 我读到我应该使用applicationWillResignActive停止视频播放的消息应该可以解决崩溃问题
  • Objective-C 中发送给对象的消息可以被监听或者打印出来吗? [复制]

    这个问题在这里已经有答案了 可能的重复 Objective C 中拦截方法调用 https stackoverflow com questions 1618474 intercept method call in objective c 如

随机推荐

  • 如何在 Pycharm 中复制和粘贴?

    每次我尝试将网址复制并粘贴到 PyCharm 中时 我什至尝试过 简单粘贴 但我什么也没看到 是否有任何力量可能阻止试图粘贴信息的人 我真的不知道发生了什么事 您很可能在首次安装 PyCharm 时安装了 IdeaVim 支持 要卸载插件
  • 如何使用 Maven 将我的 Web 应用程序和 Tomcat 打包在一起?

    我想分发打包为嵌入 Apache Tomcat 中的 WAR 的应用程序 也就是说 我想将 Tomcat 与我的应用程序一起分发 如何使用 Maven 来完成这种分发打包 我见过Maven 货物插件 http cargo codehaus
  • 为什么将 float32 转换为 float64 时会丢失精度?

    在 Go 中 将 float32 数字转换为 float64 精度会丢失 例如 将 359 9 转换为 float64 会产生 359 8999938964844 如果 float32 可以精确存储 为什么 float64 会失去精度 示例
  • git:如何找到已经合并的两个分支的共同祖先

    为了找到 2 个 git 分支的共同祖先 需要执行以下操作 git merge base branch another branch 好的 但是 如果两个分支已经合并怎么办 当我使用merge base在这种情况下 我得到的提交是合并之前的
  • 如何检测 OS X 是否处于深色模式?

    我的可可应用程序在新的 OS X 黑暗模式 下运行时必须更改其行为 有没有办法检测 OS X 风格是否设置为该模式 认为还没有可可方法来检测它 但是您可以使用defaults read检查 OSX 是否处于深色模式 defaults rea
  • 如何更改 Xcode 4.0(内部版本 4A304a)中的默认公司名称[重复]

    这个问题在这里已经有答案了 可能的重复 我在哪里设置我的公司名称 https stackoverflow com questions 2956464 where do i set my company name 我刚刚安装了 Xcode 4
  • Django:基于 DRF 令牌的身份验证 VS JSON Web 令牌

    我正在构建一个现实世界的应用程序 用户将主要从 Android iOS 设备以及桌面访问该应用程序 从我的基础研究中 我意识到与基于会话的身份验证相比 基于令牌的身份验证机制对于客户端 服务器模型来说更加更好和更优雅 在 Django 中
  • 仅在 Vim 中启用 .h 和 .cpp 文件的某些插件和选项

    我在 Vim 中安装了 delimitMate 以完成大括号 但它针对所有文件运行 而不仅仅是 h 和 cpp 文件 DelimitMate 有一个在缓冲区中禁用自身的选项 因此我需要在 vimrc 中添加一些内容 表示 在除 h 和 cp
  • 从应用程序脚本中的电子表格更新下拉列表

    我正在尝试学习 Google 的 HTML Service UI 服务 并且正在努力弄清楚如何根据电子表格中的数据更新 UI 中的下拉列表 我从以下位置复制了以下代码这个谷歌教程 https developers google com ap
  • 授权 Google Drive Android API

    我尝试通过以下方式访问 Google 云端硬盘中的数据谷歌云端硬盘 Android API https developers google com drive android auth 不是 Web API 令人疯狂的是 当我使用此访问权限
  • Windows 上的 script/generate:“script”未被识别为内部或外部命令

    每当我尝试使用 Rails 时script generate or script install命令我收到这种错误 C workspace gt script generate bigcommand script is not recogn
  • 如何在 MySQL 中创建表别名

    我正在将 MS Access 应用程序 已将表链接到 MSSQL Server 迁移到 MySQL 作为克服一些 MSAccess 表命名问题的方法 我正在寻求一种解决方案来添加 MySQL 表别名 该别名将指向 MySQL 数据库中的现有
  • Javascript 隐藏所选选项

    我有这段代码来隐藏选定的选项 function connect selectbox option show selectbox each function i var obj selectbox option value this val
  • Django自定义用户管理员change_password

    我成功地在 django 中使用了自定义用户模型 最后要做的事情是超级用户更改任何用户密码的 AdminChangePasswordForm 目前 来自 admin myapp user 的更改密码链接给出了 404 答案 覆盖 get u
  • 数组的长度属性在哪里定义?

    我们可以确定一个的长度ArrayList
  • 如何在 C# 中将 SID 转换为帐户名

    我有一个 C 应用程序 可以扫描目录并收集一些信息 我想显示每个文件的帐户名 我可以通过获取 FileInfo 对象的 SID 在本地系统上执行此操作 然后执行以下操作 string GetNameFromSID SecurityIdent
  • C++ 相当于 Python __getattr__(self, name)

    我喜欢 Python 的原因之一是它的方式自定义属性访问 https docs python org 2 reference datamodel html customizing attribute access class Foo obj
  • 在Prolog中查找最大子列表

    我是 Prolog 新手 正在尝试解决以下问题的实例最大子数组问题 https en wikipedia org wiki Maximum subarray problem 我有以下相当优雅的 C 代码 int maxSubArray ve
  • 带阴影的 UIView

    我试图在一个简单的 UIView 对象周围创建一个阴影 该对象添加到 UIViewController 视图的顶部 这样做最直接的方法是什么 首先 请务必导入 Quartz Core 库 import
  • Foundation 可以告诉我 Objective-C 方法是否需要特殊的结构返回吗?

    据我了解 背景 Objective C 方法调用基本上是带有两个隐藏参数 接收器和选择器 的 C 函数调用 Objective C 运行时包含一个名为 objc msgSend 的函数 允许以这种方式调用方法 不幸的是 当函数返回结构时 可