私が理解している背景:Objective-Cメソッドの呼び出しは、基本的に2つの隠しパラメーター(レシーバーとセレクター)を持つ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