我理解的背景: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