【发布时间】:2013-08-09 09:33:37
【问题描述】:
我理解的背景: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
【问题讨论】:
-
大约两周前我也试图弄清楚这一点,但也找不到比您在该 GitHub 线程中包含的更多信息。在其他地方,我看到 Greg Parker 提出了“经验方法”:针对您关心的任何架构编译一些示例,并检查结果。我现在正在尝试确定 libclang 是否会在这里提供帮助。
标签: objective-c objective-c-runtime