据我了解,背景: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(使用前将#替换为@)