エンコードされた型

つまりはNSMethodSignature-getArgumentTypeAtIndex:で引数の型、NSMethodSignature-methodReturnType:で戻り値の型が戻るのだが、char*で戻る訳であって最後は文字比較になってしまうのが格好悪い。

格好悪いなんて書いたが、それは違う。やはり私の無知だった。
Objective-C Runtime Programming Guide: Type Encodings

getArgumentTypeAtIndex:や-methodReturnType:で戻るchar*はいわゆるメタキャラクタであり、引数の型をエンコードして文字列で表したものなのである。

c char
i int
s short
l long
q long long
C unsigned char
I unsigned int
S unsigned short
L unsigned long
Q unsigned long long
f float
d double
B C++のbool
v void
* 文字列(char*)
@ オブジェクト (静的に型定義されているまたはidとして型定義されているもの)
# クラスオブジェクト(Class)
: メソッドセレクタ(SEL)
[配列型] 配列
{名前=型...} 構造体
(型...) 共用体
bnum num ビットフィールド
^型 型へのポインタ
? 不明な型(関数ポインタ)
r const
n in
N inout
o out
O bycopy
R byref
V oneway

1文字のメタキャラクタで引数の型を表すのは、元々どういう意図があったのだろう。