Eri*_*urg 9 objective-c objective-c-runtime
我理解的背景: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
小智 0
Objective-C 在给定架构上使用与 C 相同的底层 ABI,因为方法只是带有隐式self和_cmd参数的 C 函数。
换句话说,如果你有一个方法:
- (SomeStructType)myMeth:(SomeArgType)arg;
Run Code Online (Sandbox Code Playgroud)
那么这实际上是一个普通的 C 函数:
SomeStructType myMeth(id self, SEL _cmd, SomeArgType arg);
Run Code Online (Sandbox Code Playgroud)
我很确定您已经知道这一点,但我只是向其他读者提及。换句话说,您想询问 libffi 或任何类型的类似库如何SomeStructType返回该架构。
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |